2010-08-20 85 views
2

我們正在開發需要通過TCP發送和接收數據的跨平臺網絡應用程序。在linux上,我們使用select()來等待發送和接收,以確保套接字已準備就緒。但是,在OSX上,選擇進行讀取會花費大量的時間返回 - 超過20秒。 select()沒有超時 - 我們的超時時間是60秒,數據回來了,它只是可笑地緩慢。這隻會發生讀取,而不是發送。網絡似乎沒有問題(再次,同一網絡上的Linux機器似乎沒有相同的問題)。mac osx上的select()套接字系統調用花費很長時間讀取

是否有人知道在OSX中使用套接字編程的任何警告?

+3

您是否嘗試過使用tcpdump或類似工具來驗證數據是否按時到達?這可能是網絡問題,而不是「select()」問題。 – 2010-08-20 16:06:33

+1

哇,你是對的!服務器正在等待30秒發送 - 我的不好。感謝您的幫助 – wickedchicken 2010-08-20 17:05:31

回答

1

您是否在OSX上嘗試過kqueue(2)而在Linux上嘗試過epoll(7)?這些性能和靈活性要高得多,儘管平臺特定的I/O事件處理接口。你也可以看看libevent,它爲你抽象出所有這些。

+0

這個問題在Daniel的回答中得到了很好的回答,但我將其標記爲答案,因爲答案是否定的。謝謝。 – wickedchicken 2010-08-25 18:18:48