2011-05-05 33 views
1

我有一個阻塞TCP套接字,它在accept()呼叫阻塞。是否有可能使accept()調用返回(除了通過從客戶端獲得連接)?這是關閉套接字作爲系統關閉的一部分,並退出正在接受連接的線程。可以接受()返回沒有得到連接?

+0

使它成爲一個非阻塞的插座..? – 2011-05-05 12:23:42

回答

3

使用SOCK_NONBLOCK在flags參數:http://www.linuxhowtos.org/manpages/2/accept.htm

+0

@Maanu有阻塞套接字,這會使其不阻塞 – asami 2011-05-05 13:42:08

+0

實際上,這隻會影響新的客戶端套接字。當你創建它時,你想在初始服務器套接字上使用這個標誌:http://linux.die.net/man/2/socket – Derecho 2015-08-07 12:31:25

4

1)在一個單線程程序可以使用來自另一進程的信號。確保在安裝信號處理程序時不傳遞SA_RESTART標誌。 2)如果您需要從同一進程的另一個線程停止accept(),請在您的套接字和此管道上創建套接字對或管道並阻止select()。當你需要解鎖時,寫一些東西給管道。

3)或只是使用select()與一些小超時(1秒),並在每次返回輪詢退出標誌。

0

在windows中,如果關閉接受連接(調用closesocket()),WSA將取消accept(接受將返回INVALID_SOCKET)。

相關問題