2011-02-12 36 views
1

我有一個偵聽端口的小型TCP服務器。在調試時,我通常會按CTRL-C服務器來終止進程。「使用中的地址」與Windows和Linux上的bind()之間的區別 - errno = 98

在Windows上,我可以快速重啓服務,套接字可以被反彈。在Linux上我有綁定之前等待幾分鐘()成功

返回當bind()的失敗則返回錯誤號= 98,地址在使用中。

我想更好地理解實現中的差異。 Windows確實對開發人員更友好,但我懷疑Linux是在做'錯誤的事情'。

我最好的猜測是Linux的等待,直到所有可能的客戶已經檢測到舊插座允許創建新的套接字之前打破。它可以做到這一點的唯一方法就是等待他們超時

有沒有辦法在Linux開發過程中改變這種行爲?我希望能複製的Windows做到這一點

回答

3

你想使用Linux上的插座上的SO_REUSEADDR選項的方式。相關的手冊頁是socket(7)。這是其使用的exampleThis question解釋發生了什麼。

Here's這個答案的重複。

在Linux上,SO_REUSEADDR讓您綁定到一個地址,除非活動連接存在。在Windows上,這是默認行爲。在Windows上,SO_REUSEADDR允許您將多個套接字另外綁定到相同的地址。有關更多信息,請參閱herehere

+0

嘿感謝一堆,不知道尋找SO_REUSEADDR。現在我的信息很豐富。謝謝! – stuck 2011-02-12 18:08:26

相關問題