socket[可读\可写\异常]3种条件的发生


1 下列四个条件中的任何一个满足时,socket准备好读
  1. socket接收缓冲区中已经接收的数据的字节数 socket接收缓冲区低水位标记
    注解:可以用socket选项SO_RCVLOWAT来设置低水位标记,对于TCP和UDPsocket,其缺省值为1。
  2. 套接字是一个监听套接字且已完成的连接数不为0。对于这样的套接字的accept通常不会阻塞。
  3. 连接的读这一半关闭(即:接收到对方发过来的FIN的TCP连接)。对于这样的socket的读操作不会阻塞,将返回0
  4. 有一个socket有异常错误条件待处理。对于这样的socket的读操作将不会阻塞,并且返回一个错误(-1),errno则设置成明确的错误条件。这些待处理的错误也可通过指定socket选项SO_ERROR调用getsockopt来取得并清除
2 下列三个条件中的任何一个满足时,socket准备好写
  1. socket发送缓冲区中的可用空间字节数 socket发送缓冲区低水位标记
    注解:可以用socket选项SO_SNDLOWAT来设置低水位标记,对于TCP和UDP socket,其缺省值一般是2048Bytes;
  2. 使用 非阻塞式connect的套接字 已建立连接,或者connect已经以失败告终
  3. 连接的写这一半关闭,对于这样的socket的的写操作将产生信号SIGPIPE;
    注解:shutdown(connfd, SHUT_WR); //关闭写方向
  4. 有一个socket异常错误条件待处理。对于这样的socket的写操作将不会阻塞并且返回一个错误(-1),errno则设置成明确的错误条件.这些待处理的错误也可以通过指定socket选项SO_ERROR调用getsockopt函数来取得并清除
3 socket异常条件发生

    套接字存在带外数据或者仍处于带外标记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值