受け入れることができる着信接続の数が制限されているサーバーがあります。さまざまな理由で、さまざまな間隔で複数のクライアントがサーバーに接続しています。
サーバーの少なくとも 1 つの機能では、クライアントの要求を処理し、同じソケットで応答する必要があります。でも:
- クライアントはタイムアウトについて不平を言います(そして、ソケットを閉じると思います)
- サーバーは処理を正常に終了しますが、ソケットが閉じられているため、スレッドは SIGCHLD をスローします。
ソケット記述子をチェックする、以下のようなコードがあります。
if (connect_desc > 0)
{
if (write(connect_desc, buffer, sizeof(buffer)) < 0)
{
printf("write error\n");
}
}
else
printf("connect_desc < 0\n");
私の質問は:
ソケットがクライアントによって閉じられた場合、ソケット記述子の値はサーバー上で変化しますか? そうでない場合、コードでそれをキャッチする方法はありますか?
最後のプリントアウトが表示されません。