我有兩臺機器運行一個簡單的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