我为linux编写了一个带epoll
的简单TCP网络库。
在我的一个测试中,我想测试库的吞吐量。 我发送2000000个500字节的消息。
在收到800,000或更多信息后,绑定套接字在recv
上随机返回零。
其他时候,收到所有邮件。会导致这种情况发生的原因是什么?
recv调用位于sparrow.c
文件的第393行。
我可以验证data_in->len > data_in->cur
int result = recv(sock->fd, data_in->data + data_in->cur, data_in->len - data_in->cur, 0);
//On error or connection closed.
//TODO We need to handle closed connections differently, possibly automatically reconnecting.
if(result <= 0) {
//TODO Make Dprintf
printf("Receive error or we received a signal that the connection closed.\nWe are closing the connection.\n");
spev->error = 1;
sparrow_socket_close(sp,sock);
return 0;
}
您可以在此处查看图书馆:
编辑:
答案 0 :(得分:1)
recv()
在流结束时返回零,这在对等体关闭连接时发生。没有什么“随意”的。