网络编程——13. 多种IO函数

13.1 Linux中的send & recv

send
网络编程——13. 多种IO函数_第1张图片

recv
网络编程——13. 多种IO函数_第2张图片

这两个函数的最后一个参数是收发数据时的可选项。可以利用位或运算(|)同时传递多个信息。
网络编程——13. 多种IO函数_第3张图片

MSG_OOB

用于发送“带外数据”紧急消息。优先处理。

发送例子
网络编程——13. 多种IO函数_第4张图片

接收例子
网络编程——13. 多种IO函数_第5张图片
编译并运行上面的send和recv(./send 127.0.0.1 9190 ./recv 9190)
结果显示:
123
Urgent message:4
567
Urgent message:0
89
通过MSG_OOB可选项传递数据不会加快数据传输速度,而且通过信号处理函数也只能读取1字节,剩余数据只能通过未设置MSG_OOB的普通输入函数读取。这是因为TCP不存在真正的“带外数据”,只是利用TCP的紧急模式进行传输

检查输入缓冲

同时设置MSG_PEEK选项和MSG_DONTWAIT选项,以验证输入缓冲是否存在接收的数据。

设置MSG_PEEK选项并调用recv函数时,即使读取了输入缓冲的数据也不会删除。
MSG_PEEK,MSG_DONTWAIT合作用于调用以非阻塞方式验证待读数据存在与否的函数。



13.2 readv和writev函数

对数据进行整合传输及发送的函数
通过writev函数可以将分散保存在多个缓冲中的数据一并发送
通过readv函数可以由多个缓冲分别接收
因此,可以使用这两个函数以减少IO函数的调用次数

你可能感兴趣的:(网络编程)