UNIX網絡編程--套接字可讀或可寫的條件

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信號,該信號的缺省行爲是終止進程。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章