5秒ごとにクライアントにデータを送信するサーバーがあります。サーバーがデータを送信してから印刷するまで、クライアントがread()でブロックするようにします。私はread()がデフォルトでブロックされていることを知っています。私の問題は、クライアントがread()をブロックしていないことです。これは非常に奇妙で、これは通常の問題ではないようです。ソケットプログラミングでread()がブロックされていません
私のコードでは、無限ループで「何も戻ってこなかった」と表示されます。私はLinuxマシンで、cでプログラミングしています。私のコードスニペットは以下の通りです。ご意見をお聞かせください。
while(1)
{
n = read(sockfd, recvline, MAXLINE);
if (n > 0)
{
recvline[n] = 0;
if (fputs(recvline, stdout) == EOF)
printf("fputs error");
}
else if(n == 0)
printf("Nothing came back");
else if (n < 0)
printf("read error");
}
return;
接続が開いていることを確認しましたか(つまり、 'sockfd'が有効です)? –
'read()'の戻り値0は、もう一方の端(サーバー)がソケットを閉じたことを意味します。 –
@Edヒール:はい、有効です。私はその点検をしています。 – Mathew