- 论坛徽章:
- 0
|
目前遇到一个新的问题。服务端设计比较简单,接收8次数据之后将套接口关闭,客户端部分代码如下:
int rt;
char a[5000];
fd_set rset, wset;
FD_ZERO(&rset);
FD_ZERO(&wset);
while (1) {
FD_SET(sock, &rset);
FD_SET(sock, &wset);
select(sock + 1, &rset, &wset, NULL, NULL);
if (FD_ISSET(sock, &rset)) {
rt = recv(sock, a, 1000, 0);
if (rt < 0) {
printf("recv error:%s\n", strerror(errno));
}
}
if (FD_ISSET(sock, &wset)) {
rt = write(sock, a, 5000);
if (rt < 0) {
printf("send error:%s\n", strerror(errno));
} else {
printf("send 5000 bytes\n");
}
}
}
客户端的部分log如下:
1.
send 5000 bytes
send 5000 bytes
send 5000 bytes
send 5000 bytes
send 5000 bytes
send 5000 bytes
catch SIGPIPE
send error:Broken pipe
recv error:Connection reset by peer
2.
send 5000 bytes
send 5000 bytes
send 5000 bytes
send 5000 bytes
send 5000 bytes
send 5000 bytes
recv error:Connection reset by peer
catch SIGPIPE
send error:Broken pipe
请问为什么会出现第一种log,按理说不是应该recv先报错吗?
谢谢解答! |
|