回覆列表
  • 1 # 使用者3417633067606

    1.首先將標誌位設為Non-blocking模式,準備在非阻塞模式下呼叫connect函式

    2.呼叫connect,正常情況下,因為TCP三次握手需要一些時間;而非阻塞呼叫只要不能立即完成就會返回錯誤,所以這裡會返回EINPROGRESS,表示在建立連線但還沒有完成。

    3.在讀套介面描述符集(fd_set rset)和寫套介面描述符集(fd_set

    wset)中將當前套介面置位(用FD_ZERO()、FD_SET()宏),並設定好超時時間(struct

    timeval *timeout)

    4.呼叫select( socket, &rset, &wset, NULL, timeout )

    返回0表示connect超時

    如果你設定的超時時間大於75秒就沒有必要這樣做了,因為核心中對connect有超時限制就是75秒。

    網路程式設計中socket的分量我想大家都很清楚了,socket也就是套介面,在套介面程式設計中,提到超時的概念,我們一下子就能想到3個:傳送超時,接收超時,以及select超時(注:

    select

    函式並不是只用於套介面的,但是套介面程式設計中用的比較多),在connect到目標主機的時候,這個超時是不由我們來設定的。不過正常情況下這個超時都很

    長,並且connect又是一個阻塞方法,一個主機不能連線,等著connect返回還能忍受,你的程式要是要試圖連線多個主機,恐怕遇到多個不能連線的

    主機的時候,會塞得你受不了的。我也廢話少說,先說說我的方法,如果你覺得你已掌握這種方法,你就不用再看下去了,如果你還不瞭解,我願意與你分享。本文

    是已在Linux下的程式為例子,不過拿到Windows中方法也是一樣,無非是換幾個函式名字罷了。

  • 中秋節和大豐收的關聯?
  • 失眠有什麼好的改善方法?