wordpress微言,网站建设优化保定,黑龙江省建设厅,编辑wordpress代码✍个人博客#xff1a;https://blog.csdn.net/Newin2020?typeblog #x1f4e3;专栏地址#xff1a;http://t.csdnimg.cn/fYaBd #x1f4da;专栏简介#xff1a;在这个专栏中#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话#xff0c;欢迎点赞… ✍个人博客https://blog.csdn.net/Newin2020?typeblog 专栏地址http://t.csdnimg.cn/fYaBd 专栏简介在这个专栏中我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话欢迎点赞收藏您的支持就是我创作的最大动力 推荐参考地址https://www.xiaolincoding.com/这个大佬的专栏非常有用 157. Socket 在什么情况下是可读/可写
Socket 在以下情况下是可读的
当有数据到达时即接收缓冲区中有数据可供读取。当连接被对方关闭时也会触发可读事件。
Socket 在以下情况下是可写的
当发送缓冲区有足够空间可以写入数据时即可以继续向对方发送数据。当连接建立成功后初始状态下套接字是可写的表示可以开始发送数据。
需要注意的是可读和可写并不意味着一定能够读取或写入数据。它们只是表示当前套接字是否处于相应的状态具体的读取和写入操作还需要根据实际情况进行处理。例如在非阻塞模式下当套接字可读/可写时可能仍然无法读取/写入数据因为缓冲区可能为空或已满。
158. TCP 通讯中select 到读事件但是读到的数据量是 0为什么如何解决?
select 返回 0 代表超时。select 出错返回 -1。
select 到读事件但是读到的数据量为 0说明对方已经关闭了 socket本端关闭读即可。
当 select 出错时会将接口置为可读又可写。这时就要通过判断 select 的返回值为 -1 来区分。
159. SO_REUSEADDR 选项
服务器程序可以通过设置 socket 选项 SO_REUSEADDR 来强制使用被处于 TIME_WAIT 状态的连接占用的 socket 地址。
int sock socket(PF_INET, SOCK_STREAM, 0);
assert(sock 0);
int reuse 1;
setsocketopt(sock, SOL_SOCKET, SO_REUSEADDR, reuse, sizeof(reuse));struct sockeaddr_in address;
bzero(address, sizeof(address));
address.sin_family AF_INET;
inet_pton(AF_INET, ip, address.sin_addr);
address.sin_port htons(port);
int ret bind(sock, (struct sockaddr*)address, sizeof(address));经过 setsockopt 的设置之后即使 sock 处于 TIME_WAIT 状态与之绑定的 socket 地址也可以立即被重用。