博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《UNIX网络编程 卷1:套接字联网API(第3版)》——8.15 使用select函数的TCP和UDP回射服务器程序...
阅读量:5874 次
发布时间:2019-06-19

本文共 858 字,大约阅读时间需要 2 分钟。

本节书摘来自异步社区《UNIX网络编程 卷1:套接字联网API(第3版)》一书中的第8章,第8.15节,作者:【美】W. Richard Stevens , Bill Fenner , Andrew M. Rudoff著,更多章节内容可以访问云栖社区“异步社区”公众号查看

8.15 使用select函数的TCP和UDP回射服务器程序

现在,我们把第5章中的并发TCP回射服务器程序与本章中的迭代UDP回射服务器程序组合成单个使用select来复用TCP和UDP套接字的服务器程序。图8-24是该程序的前半部分。

screenshot

创建监听TCP套接字

14~22 创建一个监听TCP套接字并捆绑服务器的众所周知端口,设置SO_REUSEADDR套接字选项以防该端口上已有连接存在。

创建UDP套接字

23~29 还创建一个UDP套接字并捆绑与TCP套接字相同的端口。这里无需在调用bind之前设置SO_REUSEADDR套接字选项,因为TCP端口是独立于UDP端口的。

图8-25给出了服务器程序的后半部分。

screenshot

给SIGCHLD建立信号处理程序

30 给SIGCHLD建立信号处理程序,因为TCP连接将由某个子进程处理。我们已在图5-11中给出了这个信号处理函数。

准备调用select

31~32 我们给select初始化一个描述符集,并计算出我们等待的两个描述符的较大者。

调用select

34~41 我们调用select只是为了等待监听TCP套接字的可读条件或UDP套接字的可读条件。既然我们的sig_chld信号处理函数可能中断我们对select的调用,我们于是需要处理EINTR错误。

259~263

处理新的客户连接
42~51 当监听TCP套接字可读时,我们accept一个新的客户连接,fork一个子进程,并在子进程中调用str_echo函数。这与第5章中采取的步骤相同。

处理数据报的到达

52~57 如果UDP套接字可读,那么已有一个数据报到达。我们使用recvfrom读入它,再使用sendto把它发回给客户。

转载地址:http://vsenx.baihongyu.com/

你可能感兴趣的文章
NO3 cat-xargs-cp-mv-rm-find命令
查看>>
Performance Tuning
查看>>
Javascript 强制浏览器渲染Dom文档
查看>>
用HTML5 Canvas为网页添加动态波浪背景
查看>>
matlab handle plot
查看>>
美国人这样教育小学生_节选
查看>>
大公司里学做人,小公司里学做事。
查看>>
html5学习笔记——html保留标签(一)
查看>>
第九次作业
查看>>
你们以为运营商只是HTTP插点广告而已么?
查看>>
远程下载马bypass waf
查看>>
关系完整性约束
查看>>
BZOJ 1007 [HNOI2008]水平可见直线 ——半平面交 凸包
查看>>
Linux内核第六节 20135332武西垚
查看>>
hdu1243 dp (类最长公共子序列)
查看>>
图论--有向图强连通分量的标记及缩点模板
查看>>
hdu3294 Girls' research manacher
查看>>
通用sqlserver分页存储过程
查看>>
(转载)C#提取汉字拼音首字母的方法
查看>>
PXE-cobbler 无人值守装机------续
查看>>