|
服务器端是非阻塞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;
} |
|