我有两台机器运行一个简单的C TCP服务器,这些服务器是我为测试目的编写的,其中1个使用Fedora 16,另一个使用Ubuntu 11.10。我的Fedora机器完美工作,但在Ubuntu机器上,recv()不会阻塞。请记住,这些机器运行的代码相同。有没有人看过这个?由于recv()不会阻止
int TcpSocket::ReadFromClient(int socket, char* buf, int len)
{
char *request = buf;
int slen = len;
int c = recv(socket, request, slen, 0);
while((c > 0) && (request[c-1] != '\n'))
{
request += c;
slen -= c;
c = recv(socket, request, slen, 0);
}
if (c < 0)
{
return c;
}
else if(c == 0)
{
//Sending back an empty string
buf[0] = '\0';
}
return len-slen;
}
是什么回报? – 2012-07-30 23:52:53
听起来像您的套接字处于非阻塞模式。 – 2012-07-31 00:10:47
它第一次(实际上是发送数据时)返回1,循环时返回0。为什么它会阻塞我的fedora机器? – tier1 2012-07-31 00:44:10