免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2731 | 回复: 5
打印 上一主题 下一主题

求助as400 socket 的send问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-08 08:58 |只看该作者 |倒序浏览
as400向aix发送数据,用send,而aix端用recv来接收,但是当发送数据到一定量的时候,as400端出现“Interrupted function call”和“Descriptor not valid”错误,errno应该是EINTR 。但是这种情况对于同样的数据不是每次都出现,时有时无。as400端的程序使用C写的,部分代码如下:

rc = send(sdn, sndbuf+sum, BUF_LEN, 0)
{
     if(rc <= 0)
     {
          ErrMsg(ERRMSG204); /*这个函数是向sysopr发送msg*/
          close(sdn);
          return(-1)
      }
}


用strerror(errno)查出来的信息是“Interrupted function call”和“Descriptor not valid”
因为我不是专门搞通讯编程的,所以对socket不是很了解,Google了一下,发现很多人说是因为,阻塞模式下,收到信号就会产生EINTR,处理是收到该信号时,忽略该信号,重新发送该数据包。但是因为这一部分程序比较底层,不敢随便改,改了以后怕出现数据发送问题,所以想问明白了,哪位仁兄能帮我解释一下啊。另外有没有可能是aix那端的问题,谢谢了

对了,补充一下,aix端同时出错,不过错误是这样的,recv收到的字节是0,并且errno的值也是0

[ 本帖最后由 shaun_dayie 于 2009-4-8 09:01 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-04-08 10:48 |只看该作者
自己顶一下

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2009-04-08 11:34 |只看该作者
连接建立没呀?
试下单步跟踪,再用 NETSTAT OPTION(*CNN) 看看
跟踪是 400的强项。

论坛徽章:
0
4 [报告]
发表于 2009-04-08 12:13 |只看该作者
原帖由 hanyu 于 2009-4-8 11:34 发表
连接建立没呀?
试下单步跟踪,再用 NETSTAT OPTION(*CNN) 看看
跟踪是 400的强项。


链接肯定是建立的,因为多数的时候是可以传输成功的,即使不成功的时候也是在传输了几千条后才发生这种情况的,所以跟踪也不太容易啊。用NETSTAT OPTION(*CNN) 查看了,没发现什么异常,状态是established

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2009-04-08 19:49 |只看该作者
传输了几千条后才发生这种情况,
这个比较麻烦,把 断点设在 ErrMsg(ERRMSG204); 试试。
再看看当时的现场情况,看看作业的joblog和系统日志。

论坛徽章:
0
6 [报告]
发表于 2009-04-09 14:30 |只看该作者

回复 #5 hanyu 的帖子

我看网上对于EINTR的处理办法是继续读或写,我现在将as400端的通讯程序修改如下,测试很多次目前还没有问题
,但是还是心里没有底
rc = send(sdn, sndbuf+sum, BUF_LEN, 0)
{
     if(rc <= 0)
     {
          if(errno==3407) /*3407是EINTR的errno */
          {
                continue;
           }
          ErrMsg(ERRMSG204); /*这个函数是向sysopr发送msg*/
          close(sdn);
          return(-1)
      }
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP