2010-03-31 110 views
0

嗨夥計,選擇呼叫似乎沒有超時

我已經變得可用螺紋C++程序有多達三個線程在三個獨立的套接字描述符等待數據調用選擇。每個線程處理一個套接字並將其添加到readfds,超時時間爲300秒。如果有數據可用,選擇返回後,我打電話給recv來閱讀它。

有什麼我需要知道的與winsock和線程,因爲某些原因後幾個小時的選擇調用似乎都沒有超時。一個多線程程序可以從多個線程中選擇而沒有問題嗎?

我知道我應該有一個線程監聽所有三個套接字,但是這對於這個應用程序來說是一個很大的改變,我只想要應用一個錯誤修復。

歡呼,

馬丁。

+3

@martsbradley,而不顯示問題的一些示例代碼有沒有很多我們能爲您做的不是猜測。 – Glen 2010-03-31 12:25:32

回答

2

沒有一些代碼,我只能猜測。 select超時到無法正常工作的最常見原因struct timeval參數在循環的每次迭代中都未重置。一些(全部?)select實現更新超時參數以反映花費的時間量。但是,這通常會導致select未被阻止。

你確定select是問題,你沒有其他的東西像堆棧損壞,內存泄漏等?

編輯:我已經在Windows之下使用select之前在不同的套接字上從多個線程沒有問題。我忘了在第一篇文章中提到這一點。

+0

通過在Linux機器上進行選擇來更新超時結構,我之前已經看到了,所以我確信我不會重複這個問題。 – martsbradley 2010-03-31 12:54:30