0
我最近開始在Linux下學習網絡編程,看來我無法找出正確的方法來檢測是否建立了與遠程主機的連接。 ATM所有未建立的連接都在epoll實例中註冊。一旦EPOLLOUT標誌設置爲1的事件到達,連接就被標記爲已建立。像這樣容易,但我做對了...檢測連接是否已建立
有沒有更好的方式做到這一點?如果不是,等待套接字是否可寫是確保連接已建立的好方法?
我最近開始在Linux下學習網絡編程,看來我無法找出正確的方法來檢測是否建立了與遠程主機的連接。 ATM所有未建立的連接都在epoll實例中註冊。一旦EPOLLOUT標誌設置爲1的事件到達,連接就被標記爲已建立。像這樣容易,但我做對了...檢測連接是否已建立
有沒有更好的方式做到這一點?如果不是,等待套接字是否可寫是確保連接已建立的好方法?
poll/epoll/select應該都可以工作。 connect(2)的手冊頁說您得到EINPROGRESS,並且您可以使用select或poll來檢測它是否可寫,從而檢測完成。然後使用getsockopt檢查SOL_SOCKET,SO_ERROR狀態,以查看連接是成功還是失敗。
如果您在嘗試連接時重試連接,則會得到EALREADY。
所以這是記錄的方式來做到這一點,並聽起來對我來說是正確的。
請向我們展示您用於連接的代碼。 – bmargulies