2015-10-16 64 views
0

我有一臺服務器用於處理多個客戶端。連接到它的每個客戶端都在其自己的線程中進行服務。現在,如果服務器端出現任何錯誤,我想通過調用pthread_exit來退出該線程,並終止該線程正在服務的客戶端。然而;當我嘗試這樣做時,我的客戶掛了。此外,這會導致處於不同線程中的其他客戶端也會掛起。我在隨機點中調用pthread_exit來測試它...客戶端在服務器線程中的pthread_exit()後掛起C

回答

1

最有可能的問題是,在調用pthread_exit()之前,您沒有調用close(newsockfd)。如果是這樣,那麼你的服務器線程就會消失,但是它用來與客戶端通信的套接字保持打開狀態,即使服務器不再使用它。然後,客戶端的傳出TCP緩衝區填滿,客戶端無限期地等待服務器從套接字recv()更多的數據,這從來沒有發生過。

+0

非常感謝!這似乎已經解決了這個問題。 – coder4lyf