下列情况下,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来读取和清除该错误。
网络程序中,select能处理的异常情况只有一种:socket上接受到带外数据
本文发布于:2024-01-31 09:40:27,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170666523027595.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |