Linux高性能服务器编程
文章平均质量分 78
cedar forest
这个作者很懒,什么都没留下…
展开
-
【I/O复用】同时处理TCP和UDP服务
一个socket只能监听一个端口,一个端口可以同时处理TCP和UDP请求。使用I/O复用技术可以同时监听多个socket。下面的代码实现了在一个端口上监听TCP请求和UDP请求。原创 2023-04-03 21:47:43 · 537 阅读 · 0 评论 -
【I/O复用】聊天室程序
书中使用poll实现了简易的聊天室程序,我们照葫芦画瓢,用epoll来实现一个聊天室。为了体现epoll的ET模式的作用,我们把一次可以读取的数据量设置为5,这样的话我们就要处理循环读取问题了,是一个很好的练手机会。该聊天室程序能让所有用户同时在线群聊,它分为客户端和服务器两个部分。其中客户端程序有两个功能,一是从标准输入终端读入用户数据,并将用户数据发送至服务器,二是往标准输出终端打印服务器发送给它的数据。原创 2023-03-31 23:21:28 · 86 阅读 · 0 评论 -
【I/O复用】epoll系统调用(2)
参考《Linux高性能服务器编程》原创 2023-03-31 16:02:02 · 146 阅读 · 0 评论 -
【I/O复用】epoll系统调用(1)
epoll是Linux特有的I/O复用函数,允许把文件描述符上的事件放在内核的一个事件表中。当事件表检测到就绪事件后,就可以对它们进行处理。epoll系统调用可以为文件描述符设置EPOLLET模式,相关事件只会被通告一次,所以应用程序必须立即处理这个事件。EPOLLET是epoll高效的原因之一。下面还有一个问题,我在测试的时候遇到并且记录下来:为什么通信socket需要设置为非阻塞?答:如果设置成阻塞,那么在recv会一直阻塞,无法实现服务端与多个客户端通信。原创 2023-03-31 10:46:58 · 259 阅读 · 0 评论 -
【I/O复用】select系统调用
select系统调用的作用是,在一段指定时间内,监听用户感兴趣的文件描述符上的可读、可写和异常等事件。nfds表示被监听文件描述符的总数,一般设置为select监听的所有文件描述符中的最大值+1,因为文件描述符是从0开始计数的。readfds,writefds和exceptfds分别表示可读、可写、异常事件对应的文件描述符集合。select调用返回时,内核将修改它们来通知应用程序哪些文件描述符已经就绪。如下宏可以设置fd_set结构体/* 清除 fdset 的所有位 */原创 2023-03-28 23:26:14 · 219 阅读 · 1 评论