0

受け入れることができる着信接続の数が制限されているサーバーがあります。さまざまな理由で、さまざまな間隔で複数のクライアントがサーバーに接続しています。

サーバーの少なくとも 1 つの機能では、クライアントの要求を処理し、同じソケットで応答する必要があります。でも:

  • クライアントはタイムアウトについて不平を言います(そして、ソケットを閉じると思います)
  • サーバーは処理を正常に終了しますが、ソケットが閉じられているため、スレッドは SIGCHLD をスローします。

ソケット記述子をチェックする、以下のようなコードがあります。

if (connect_desc > 0)
{
    if (write(connect_desc, buffer, sizeof(buffer)) < 0)
    {
        printf("write error\n");
    }
}
else
    printf("connect_desc < 0\n");

私の質問は:

ソケットがクライアントによって閉じられた場合、ソケット記述子の値はサーバー上で変化しますか? そうでない場合、コードでそれをキャッチする方法はありますか?

最後のプリントアウトが表示されません。

4

2 に答える 2

2

Q: 記述子は変更されますか?

A: いいえ

Q: 接続状況を確認するにはどうすればよいですか?

A: 1 つの方法は、単純にソケットへの書き込みを試みて、エラー ステータスを確認することです。

強くお勧めします:

于 2013-10-23T21:17:23.213 に答える