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信号,该信号的缺省行为是终止进程。



你可能感兴趣的:(UNIX网络编程--套接字可读或可写的条件)