0

複数のクライアントを処理するサーバーがあります。それに接続する各クライアントは、独自のスレッドで処理されます。ここで、サーバー側でエラーが発生した場合は、pthread_exit を呼び出してそのスレッドを終了し、そのスレッドによって処理されていたクライアントを終了します。でも; そうしようとすると、クライアントがハングします。また、これにより、別のスレッドにある他のクライアントもハングします。テストするためにランダムな場所で pthread_exit を呼び出しました...

4

1 に答える 1

1

ほとんどの問題は、pthread_exit() を呼び出す前に close(newsockfd) を呼び出していないことです。その場合、サーバースレッドはなくなりますが、サーバーが何もしていなくても、クライアントとの通信に使用していたソケットは開いたままになります。その後、クライアントの発信 TCP バッファがいっぱいになり、クライアントはサーバーがソケットからさらにデータを recv() するまで無期限に待機しますが、これは決して起こりません。

于 2015-10-16T15:21:20.807 に答える