socket可讀的條件
1. socket的接收緩衝區中的數據字節大於等於該socket的接收緩衝區低水位標記的當前大小。對這樣的socket的讀操作將不阻塞並返回一個大於0的值(也就是返回準備好讀入的數據)。我們可以用SO_RCVLOWATsocket選項來設置該socket的低水位標記。對於TCP和UDPsocket而言,其缺省值爲1
2. 該連接的讀這一半關閉(也就是接收了FIN的TCP連接)。對這樣的socket的讀操作將不阻塞並返回0
3. 該socket是一個監聽socket且已完成的連接數不爲0.對這樣的socket'的accept通常不會阻塞。
socket可寫的條件
1. socket的發送緩衝區中的數據字節大於等於該socket的發送緩衝區低水位標記的當前大小。對這樣的socket的寫操作將不阻塞並返回一個大於0的值(也就是返回準備好寫入的數據)。我們可以用SO_SNDLOWATsocket選項來設置該socket的低水位標記。對於TCP和UDPsocket而言,其缺省值爲2048
2. 該連接的寫這一半關閉。對這樣的socket的寫操作將產生SIGPIPE信號,該信號的缺省行爲是終止進程。