- 论坛徽章:
- 0
|
服务器端是非阻塞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;
- }
复制代码 [/code] |
|