socket 可读 可写 条件

1、 下列四个条件中的任何一个知足时,socket准备好读:
 1.socket接收缓冲区中已经接收的数据的字节数大于等于socket接收缓冲区低潮限度的当前值;对这样的socket的读操做不会阻塞,并返回一个大于0的值(即:准备好读入的数据的字节数).咱们能够用socket选项SO_RCVLOWAT来设置此低潮限度,对于TCP和UDPsocket,其缺省值为1;
 2.链接的读这一半关闭(即:接收到对方发过来的FIN的TCP链接).对于这样的socket的读操做将不阻塞,而且返回0(即:文件结束符,FIN包体长度为0字节);
 3.socket是一个用于监听的socket,而且已经完成的链接数为非0.这样的soocket处于可读状态,是由于socket收到了对方的connect请求,执行了三次握手的第一步:对方发送SYN请求过来,使监听socket处于可读状态;正常状况下,这样的socket上的accept操做不会阻塞;
 4.有一个socket有异常错误条件待处理.对于这样的socket的读操做将不会阻塞,而且返回一个错误(-1),errno则设置成明确的错误条件.这些待处理的错误也可经过指定socket选项SO_ERROR调用getsockopt来取得并清除;
 
2、 下列三个条件中的任何一个知足时,socket准备好写 :
 1.socket发送缓冲区中的可用空间字节数大于等于socket发送缓冲区低潮限度的当前值,且(i):socket已链接(TCP socket),或者(ii):socket不要求链接(如:UDP socket).这意味着,若是咱们将这样的socket设置为非阻塞模式,写操做将不会阻塞,而且返回一个正值(如:由传输层接收的字节数).咱们能够用socket选项SO_SNDLOWAT来设置此低潮限度,对于TCP和UDP socket,其缺省值通常是2048Bytes;
 2.链接的写这一半关闭.对于这样的socket的的写操做将产生信号SIGPIPE;
 3.有一个socket异常错误条件待处理.对于这样的socket的写操做将不会阻塞而且返回一个错误(-1),errno则设置成明确的错误条件.这些待处理的错误也能够经过指定socket选项SO_ERROR调用getsockopt函数来取得并清除;
相关文章
相关标签/搜索