2010-03-16 65 views
0

我剛剛開始學習C中的網絡編程是如何工作的,並且我編寫了一個向UNIX終端發送消息的小程序。我在我的程序中使用pthreads,其中一個基本上只是在recvfrom()上等待接收消息。在Unix上用C取消UDP recvfrom

但是,如果用戶選擇退出程序,我希望能夠正確關閉所有線程。現在我已經設置了它的方式,一個不同的線程只是取消了recvfrom的線程,但我擔心這可能不是一個好主意,因爲我離開套接字未關閉,我沒有釋放所有的內存分配。

有沒有辦法取消recvfrom()調用,或某種方式來取消pthread時運行某些例程?

謝謝。

回答

1

如果使用pthread_kill發送信號給線程,recvfrom()應該返回-1,errno設置爲EINTR - 那麼你可以檢查「應用程序現在退出」的條件和優雅的完成了。

1

另一種方法是維護與線程ID匹配的打開連接列表。然後,無論何時取消線程,都要通過列表找到它的套接字並在套接字上調用close。

相關問題