TCP/IP网络编程第13章多种I/O函数复习总结

这章内容较少较简单

介绍下send,recv等系统IO函数
在这里插入图片描述
比write和read就多了第四个参数:接收数据时指定的可选项信息。(可以利用位或运算同时传递多个信息)

只略会了三个:
1、MSG_OOB
用于传输带外数据(Out-of-band data)
2、MSG_PEEK
验证输入缓冲中是否存在接受的数据(可以做到即使读取了输入缓冲的数据也不会删除)
3、MSG_DONTROUTE
调用IO函数时不阻塞

对于第一个MSG_OOB:

带外数据,含义是:通过完全不同的通信路径传输的数据。
所以这个参数可以理解为紧急模式。

在TCP中,即使加了MSG_OOB参数的数据,也不会破坏原有的传送顺序。因为TCP的特性之一就有个是有序。
那在TCP中,就算使用了MSG_OOB,也不能属于紧急消息吗?还是因为TCP的特性,在TCP中并不存在所谓的紧急情况?

其实在TCP中的紧急消息,并不是指的传的紧急,传的快。而是这些紧急消息会被紧急处理。虽然无法保证及时入院,但可以要求急救,当然急救具体措施,得有我们程序员完成。所以说呢,紧急消息的意义在于督促消息处理,而不是限制消息传输的快慢。

对于后两个MSG_PEEK和MSG_DONTROUTE:
知道功能就好了

同时设置这两个可选项可以做到不阻塞的读出数据后,保证输入缓冲的数据被读了之后仍然存在于缓冲中,就是这部分数据可以再次被读取。

关于readv和writev函数:
首先做一下功能概括:对数据进行整合传输及发送的函数。

说正常一点就是通过writev函数可以将分散在多个缓冲中的数据一起发送,通过readv函数可以由多个缓冲分别接收数据。

优点很明显,适当使用这2个函数可以减少IO函数的调用次数。
在这里插入图片描述

struct  iovec
{
	void  * iov_base; // 缓冲地址
	size_t  iov_len; // 缓冲大小
}

这俩很简单就没啥可说的了,总之据说他俩非常的有用,据说据说。我自己还没用过。

发布了75 篇原创文章 · 获赞 26 · 访问量 7677

猜你喜欢

转载自blog.csdn.net/qq_40962234/article/details/104237618