socket什么时候可读可写的

socket可读
  1. socket内核接受缓冲区的字节数大于或者等于其最低水位标记SO_RCVLOWAT。此时我们可以无阻塞的读该socket,并且读操作返回的字节数大于0。
  2. socket通信对方关闭连接,此时对socket的读操作将返回0 。
  3. 监听socket上有新的连接请求。
  4. socket上有为处理的错误时可读。此时我们可以使用getsockopt来读取和清除该错误。
socket可写
  1. socket内核发送缓冲区中的可用字节数大于或等于其最低水位标记SO_SNDLOWAT。此时我们可以无阻塞的写该socket,并且写操作返回的字节数大于0 。
  2. socket的写操作关闭时,我们对写操作关闭的socket执行写的时候会触发一个SIGPIPE信号。
  3. socket使用非阻塞connect连接成功或者失败(超时)之后。
  4. socket上有未处理的错误。此时我们可以使用getsockopt来读取清除错误。
socket异常

select能处理异常情况就只有一种,当socket收到外带数据的时候

发布了78 篇原创文章 · 获赞 16 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/zeqi1991/article/details/99692467