电商网站建设的关键做你的爱人3在线观看
web/
2025/10/4 23:49:56/
文章来源:
电商网站建设的关键,做你的爱人3在线观看,wordpress的分类目录做成树,莱芜金点子最新消息文章目录 一、带外数据基本知识二、带外数据的读写三、检测带外数据是否到达3.1、select上的异常事件3.2、SIGURG信号 四、带外标记 一、带外数据基本知识 带外数据#xff08;Out Of Band#xff0c;OOB#xff09;#xff0c;用于迅速通告对方本端发生的重要事件#xf… 文章目录 一、带外数据基本知识二、带外数据的读写三、检测带外数据是否到达3.1、select上的异常事件3.2、SIGURG信号 四、带外标记 一、带外数据基本知识 带外数据Out Of BandOOB用于迅速通告对方本端发生的重要事件所以它比一般数据具有更高的优先级其传输既可以使用一条独立的传输层连接也可以映射到传输普通数据的连接中。在实际的应用中带外数据的使用比较少见已知的仅有telnet、ftp等远程非活跃程序。 虽然TCP和UDP中都没有真正的带外数据但是TCP利用其头部中的紧急指针标志和紧急指针字段来传输紧急数据给应用程序提供了一种传输紧急数据的方式这种传输紧急数据的方式与带外数据类似所以TCP紧急数据也就可以被称为带外数据。 带外缓存这个缓存只有1B用来接收带外数据根据紧急指针所指的位置确定带外数据的位置。如果上层应用程序没有及时将带外数据从带外缓存中读出则后续数据将会覆盖它。
二、带外数据的读写 TCP连接使用MSG_OOB参数在函数send以及recv中实现对带外数据的读写由于带外缓存只有1B所以在传输字符串的时候只有最后一个字节会被保存在带外缓存中进行传输。比如在以下程序的接收中如果客户端依次传输“123”“abc”“123”这三次消息
memset(buffer, \0. BUF_SIZE);
ret recv(connfd, buffer, BUF_SIZE - 1, 0);
printf(got %d bytes of normal data %s\n, ret, buffer);
memset(buffer, \0. BUF_SIZE);
ret recv(connfd, buffer, BUF_SIZE - 1, MSG_OOB);
printf(got %d bytes of oob data %s\n, ret, buffer);
memset(buffer, \0. BUF_SIZE);
ret recv(connfd, buffer, BUF_SIZE - 1, 0);
printf(got %d bytes of normal data %s\n, ret, buffer);其结果为
got 5 bytes of normal data 123ab
got 1 bytes of oob data c
got 3 bytes of normal data 123由此可见使用MSG_OOB参数对带外数据进行传输会迫使TCP连接切断数据流以带外数据为分割点正常数据’123ab‘和’123‘是不能一起被读出的。 具体样例在《linux高性能服务器编程》P84-P85》
三、检测带外数据是否到达
3.1、select上的异常事件 socket上面接收到正常数据和带外数据都将会使select返回如果接收到正常数据socket将会处于可读状态如果接受到带外数据socket将会处于异常状态通过判断socket的状态即可判断带外数据是否到达。
3.2、SIGURG信号
四、带外标记 这里我们主要使用sockatmark函数来判断当前的socket是否处于带外标记即下一个被读取到的数据是否是带外数据。
#include sys/socket.h
int sockatmark(int sockfd);如果下一个数据是带外数据的话sockatmark返回1不是的话返回0.
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/87044.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!