網絡編程API connect是否會阻塞的問題

       int connect(int sockfd, const struct sockaddr *addr,
                   socklen_t addrlen);
前提條件:
addr是有效的服務器地址
sockfd是有效的file descriptor.
如果不滿足以上的條件,無論sockfd是否是阻塞或非阻塞,connect都非立刻返回錯誤碼,可以理解爲參考錯誤。
 
以上條件滿足以後:
1.當sockfd爲阻塞型套接字,connect將會阻塞,直到連接成功,即底層收到來到服務器的SYN_ACK包爲止,否則等待套接字的連接超時.
2.當sockfd爲非阻塞的套接字,connect將會即將返回,要麼返回成功,一般來將都會返回 WSAEINPROGRESS(linux下的是EINPROGRESS)的錯誤碼,用戶可以通過創建一個線程,線程中使用select等模型來實現異步的通知操作。
我們知道從select中拿出這個套接字,還是很容易的(當然因爲select本身是阻塞的,所以需要要加超時時間,這個是很蛋疼的)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章