当前位置: 首页 > news >正文

【计算机网络 - 基础问题】每日 3 题(五十三)

✍个人博客:https://blog.csdn.net/Newin2020?type=blog
📣专栏地址:http://t.csdnimg.cn/fYaBd
📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪
📝推荐参考地址:https://www.xiaolincoding.com/(这个大佬的专栏非常有用!)

157. Socket 在什么情况下是可读/可写?

Socket 在以下情况下是可读的:

  1. 当有数据到达时,即接收缓冲区中有数据可供读取。
  2. 当连接被对方关闭时,也会触发可读事件。

Socket 在以下情况下是可写的:

  1. 当发送缓冲区有足够空间可以写入数据时,即可以继续向对方发送数据。
  2. 当连接建立成功后,初始状态下套接字是可写的,表示可以开始发送数据。

需要注意的是,可读和可写并不意味着一定能够读取或写入数据。它们只是表示当前套接字是否处于相应的状态,具体的读取和写入操作还需要根据实际情况进行处理。例如,在非阻塞模式下,当套接字可读/可写时,可能仍然无法读取/写入数据,因为缓冲区可能为空或已满。

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 地址也可以立即被重用。

http://www.lryc.cn/news/466658.html

相关文章:

  • 便携式移动消防炮:灵活灭火新选择
  • 18.VScode写Java项目的教程
  • 本地生活便民信息服务小程序源码系统 PHP+MySQL组合开发 带完整的安装代码包以及搭建部署教程
  • Java项目实战II基于微信小程序的原创音乐平台{UNIAPP+SSM+MySQL+Vue}(开发文档+数据库+源码)
  • 【个人同步与备份】电脑(Windows)与手机/平板(Android)之间文件同步
  • 代码随想录算法训练营第46期Day37,38,39,41
  • 点跟踪论文—RAFT: Recurrent All-Pairs Field Transforms for Optical Flow-递归的全对场光流变换
  • jmeter学习(6)逻辑控制器-循环
  • unity学习笔记-安装与部署
  • Django+MySQL接口开发完全指南
  • CentOS7上下载安装 Docker Compose
  • 虚拟机的 NAT 模式 或 Bridged 模式能够被外界IPping通
  • C# 使用Dll的几种方法举例
  • 什么是不同类型的微服务测试?
  • Docker 拉取镜像时配置可用镜像源(包含国内可用镜像源)
  • International Symposium on Artificial Intelligence Innovations
  • Golang笔记_day10
  • mlir learn
  • Windows安装RabbitMQ 4.0.2(图文教程)
  • 分布式系统中为什么需要使用消息队列
  • Linux环境配置(学生适用)
  • 麦禾软件:Mac用户找免费开源工具的最佳选择
  • OpenCV4.8 开发实战系列专栏之 08 - 通道分离与合并
  • iOS 18.1 RC 版本发布,修复iPhone16随机重启、浏览视频卡顿等bug
  • 安装buildkit,并使用buildkit构建containerd镜像
  • maven jar包二进制文件 invalid stream header: EFBFBDEF 的错误
  • Git绑定Gitee或Github以及Git面试常见题
  • 值得细读的8个视觉大模型生成式预训练方法
  • go 包相关知识
  • 机器学习:opencv--人脸检测以及微笑检测