2017-02-25 83 views
0

我必須同時在同一子網上連接幾個ips。 買它需要我太久! (差不多25秒)等待直到完成所有「connect()」功能!如何在C套接字上設置「connect()」函數的超時時間?

如何在winsock,CPP中優化此行爲? 我找到的財產​​以後被稱爲「select」但aperrently它僅適用於Linux的如此..

+0

根據https://msdn.microsoft.com/en-us/library/ms740141(VS.85).aspx MS-Windows有一些'select()'的變體。你需要RTFM。 –

+0

select在Windows上可用,但它在POSIX系統上的運行方式與此不同。你需要問一個更好的問題。 –

+0

libevent是一個很好的庫,可以在Linux和windows中使用,異步操作非常好,乾淨。對於C++,你可以考慮增強asio – rajesh6115

回答

1

select()作品在UNIX,Linux,包含Windows,NetWare,和所有其他平臺,我測試過它。

  1. 將套接字置於非阻塞模式。
  2. 致電connect()。它會通過EAGAIN/EWOULDBLOCK或EINPROGRESS失敗。
  3. 請撥打select(),並將套接字設置爲writefds,即選擇可寫性。
  4. 當套接字變爲可寫入時,它已連接。如果在超時期限內沒有發生這種情況,請關閉它,否則將其重置爲阻止模式,如果您願意並繼續操作。
相關問題