26. TCP协议之紧急模式

阅读: 评论:0

26. TCP协议之紧急模式

26. TCP协议之紧急模式


前面我们分析过TCP的ACK, RST等, 本节来分析URG.


TCP报文段首部格式

注意 : TCP虽然是面向字节流的, 但是TCP传送的数据单元却是报文段.

消息被设置为紧急时会把TCP状态标记为URG, 同时还会设置紧急指针.


紧急模式

在套接字选项中找不到关于URG的描述, 那么该消息又怎样被标记为紧急呢? 别急, 消息标记为紧急数据这个在最开始实现套接字通信中有说到过. 紧急标志主要就是sendrecv最后一个参数的选项.

flags值描述
MSG_OOB发送或接收外来数据(紧急数据)
MSG_DONTROUTE绕过路由表查找
MSG_DONTWAIT仅操作非阻塞
MSG_PEEK窥看外来数据
MSG_WAITALL等待达到nbytes字节数后才返回
MSG_NOSIGNAL往读端关闭的管道或者socket中写数据不产生SIGPIPE信号

如果要发送和接收紧急数据只要设置recvsendflags参数值为MSG_OOB即可.

recv(sockfd, buf, sizeof(buf), MSG_OOB);
send(sockfd, buf, len, MSG_OOB);

为了发送和接收紧急消息, 那么对端又怎么区分普通消息和紧急消息呢 ? 紧急消息内核会向进程发送SIGURG信号. 既然会触发信号, 那么这样就容易区分了, 直接捕捉信号即可.


紧急模式实验

但是这里我并不打算使用捕捉信号来完成实验. 后面在socket就绪条件 [1]中有一点关于“socket上有未处理的错误 : select能处理的异常情况只有一种: socket上接收到带外数据 ” .

使用IO复用, 当接收到紧急消息时, 会触发错误(POLLERR, EPOLLERR). 这里就实验代码就采用select来接收紧急数据.


服务端 : 完整代码 URG_service.c

主要部分代码如下 :

void doservice(int service){int client;

本文发布于:2024-02-04 22:26:06,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170717799160217.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:紧急   协议   模式   TCP
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23