下列情況socket可讀:
- socket內核接收緩存區中的字節數大于或者等于其低水位標記SO_RCVLOWAT。此時我們可以無阻塞地讀該socket,并且讀操作將返回的字節數大于0。
- socket通信的對方關閉連接。此時對該socket的讀操作將返回0。
- 監聽socket上有新的連接請求。
- socket上有未處理的錯誤。此時我們可以使用getsockopt來讀取和清除錯誤
下列情況socket可寫:
- socket內核發送緩沖區中的可用字節數大于或者等于其低水位標記SO_SNDLOWAT。
- socket的寫操作被關閉。對寫操作被關閉的socket執行寫操作將處罰一個SIGPIPE信號。
- socket使用非阻塞connect連接成功或者失敗(超時)之后。
- socket上有未處理的錯誤。此時我們可以使用getsockopt來讀取和清除該錯誤。