Write FD set 的用途
一段時間,我其實都不知道 select 和 epoll 這一類 function 裏面的 writefds 到底有什麼用。read fd set很容易理解,那就是有東西要讀,或者白話一點,收到封包了。那 write fd set 到底要幹嘛呢?直到今天遇到了一個情境我才使用了它 ... 在寫 TCP socket 程式的時候,會使用到 connect 這個函式。一般來說, connect 這個函式是 blocking 的,也就是會一直到事情做完才會返回。但如果將 socket 設定成 non-blocking 模式呢?這時候 connect 會立刻返回並將 error no 設定為 EINPROGRESS 。下面是"男人"的解釋: EINPROGRESS The socket is nonblocking and the connection cannot be completed immediately. It is possible to select(2) or poll(2) for completion by selecting the socket for writing. After select(2) indicates writability , use getsockopt(2) to read the SO_ERROR option at level SOL_SOCKET to determine whether connect() completed successfully ( SO_ERROR is zero ) or unsuccessfully ( SO_ERROR is one of the usual error codes listed here, explaining the reason for the failure ). 好了,這時候我們可以看到 select 可以用來判斷 connect 是否...