LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 545|回复: 0

非阻塞套接字变成了阻塞套接字,怎么办

[复制链接]
发表于 2004-11-19 10:04:03 | 显示全部楼层 |阅读模式
服务器端是非阻塞SOCKET,客户端是阻塞SOCKET。
客户端发数据给服务器端,服务器端收到数据后,再把数据发回给客户端,客户端再发,就这样循环。。。
有时候这样循环了几次,有时候循环了几百次,当客户端把数据发给服务器端后,write返回1024,表示我要发送的1024个字节的数据已经发送出去,而服务器端却阻塞在read上面。这时候,如果我在客户端把连接关闭,服务器端的read就返回了,返回值为0。

为什么会这样,真是奇怪。

我是这样设置非足塞方式的。
代码:

   val = fcntl(sfd, F_GETFL, 0);
   if (val<0 || fcntl(sfd, F_SETFL, val | O_NONBLOCK)<0)
   {
      close(sfd);  
      return -1;
   }



这样也试过:
代码:
          flags = 1;
   if (ioctl(sfd, FIONBIO, &flags) &&
       ((flags = fcntl(sfd, F_GETFL, 0)) < 0 ||
        fcntl(sfd, F_SETFL, flags | O_NONBLOCK) < 0)) {
      close(sfd);
      return -1;
   }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表