Administrator
发布于 2023-12-08 / 2 阅读 / 0 评论 / 0 点赞

网络编程(三)

第三部分 实现Reactor高并发服务器_哔哩哔哩_bilibili

这段代码中使用了四个套接字选项,我来为你解释一下每个选项的作用:

  1. SO_REUSEADDR12: 这个选项允许在bind()允许重用本地地址。这在一个服务器进程停止后想立即重启时非常有用,因为如果不设置这个选项,你可能会发现你想要绑定的地址还在被之前的服务器进程占用,导致无法立即重新绑定。

  2. TCP_NODELAY34: 这个选项用于禁用 Nagle’s 算法,以减少网络延迟。Nagle’s 算法是一种改善网络效率的方法,它通过将小的数据包组合成大的数据包来减少网络负载。但是,这种方法可能会增加延迟,特别是在需要频繁发送小数据包的应用中。设置 TCP_NODELAY 选项可以禁用 Nagle’s 算法,使得每次写入操作都会立即发送数据。

  3. SO_REUSEPORT156: 这个选项允许多个套接字绑定到同一个端口。这样,内核可以将传入的网络流量分发到多个套接字,而不是只有一个套接字处理所有的网络流量。这可以提高服务器的性能,特别是在处理大量并发连接时。

  4. SO_KEEPALIVE78: 这个选项用于在套接字连接上启用保活报文。如果启用了这个选项,系统会定期发送保活报文,以检测连接是否仍然有效。如果长时间没有收到对方的响应,系统会认为连接已经断开。

希望这些信息对你有所帮助!如果你还有其他问题,欢迎随时向我提问。😊

这段代码是在检查epoll事件的类型。EPOLLINEPOLLPRI是epoll事件的两种类型12

  • EPOLLIN:表示对应的文件描述符上有可读的数据(包括普通的数据以及某些协议的EOF,比如TCP连接的对端关闭)12

  • EPOLLPRI:表示对应的文件描述符上有紧急的数据可读(这些数据也被称为带外数据)12

在你的代码中,(evs[i].events & EPOLLIN | EPOLLPRI)这个表达式的意思是检查evs[i].events是否是EPOLLINEPOLLPRI。如果evs[i].eventsEPOLLINEPOLLPRI,那么这个表达式的值就为真,否则为假12

希望这个解释能帮助你理解这段代码的含义。如果你还有其他问题,欢迎随时向我提问。😊


评论