2009-02-17 21 views
4

我有一個服務,負責從服務器讀取和寫入。 閱讀和寫作是在不同的線程完成的。爲什麼我在C#服務中得到這個SocketException?

閱讀器線程始終處於活動狀態,而只有寫入線程纔會激活以發送消息並且一旦消息寫入服務器並收到響應就會死亡。

的服務運行了4天之後,我不斷收到此錯誤,每當該服務將嘗試從端口讀取:

System.Net.Sockets.SocketException:一個套接字上的操作可能因爲 系統缺乏足夠的緩衝空間,不執行或因爲隊列已滿

+0

感謝您的編輯,我正在尋找編輯,但無法找到任何選項。 – user65266 2009-02-17 18:05:12

回答

6

當你非常迅速地建立了大量傳出連接和運行的本地端口會發生這種情況。您可以閱讀關於「臨時端口範圍」here

或者,您可能只是用盡了套接字。確保你完成使用後他們close

+0

我有一個我每次都讀取的套接字,並且存在keepalive機制(發送keepalive消息給服務器和處理響應),如果連接丟失套接字已關閉並且新的套接字已打開 – user65266 2009-02-17 18:11:50

0

我也強烈建議你看看你的寫線程,以及你如何引用與Socket相關的資源。也就是說,您是否正在爲您使用Socket的任何NetworkStream或其他對象調用Close/Dispose?如果您仍然在努力解決問題,那麼來自寫入線程的代碼示例會很有幫助。

您可能還需要監視進程內存並通過任務管理器處理使用情況。