テスト目的で作成した単純な C TCP サーバーを実行しているマシンが 2 台あります。1 台は Fedora 16 で、もう 1 台は Ubuntu 11.10 です。私の Fedora マシンは完全に動作しますが、Ubuntu マシンでは 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;
}