通用数据读写函数
1 | #include <sys/socket.h> |
函数参数介绍
sockfd参数
sockfd参数指定被操作的目标socket。
msg参数
msg参数是msghdr结构体类型的指针,该结构体定义如下:
1 | struct msghdr |
msg_name成员指向一个socket地址结构变量。它指定通信对方的socket地址。对于面向连接的TCP协议,该字段无意义,必须设置为NULL。msg_namelen成员指定了msg_name的长度。
msg_iov成员是iovec结构体类型的指针,iovec结构体定义如下:
1 | struct iovec |
由上结构可知,iovec结构体封装了一块内存的起始位置和长度。msg_iovlen指定这样的iovec结构对象有多少个。对于recvmsg而言,数据将被读取并存放在msg_iovlen块分散的内存中;称为分散读。而且对于sendmsg而言,msg_iovlen块分散内存中的数据将被一并发送,这被称为集中写。
msg_control和msg_controllen成员用于辅助数据的传送。msg_flags成员无需设定,它会复制recvmsg/sendmsg的flags参数的内容以影响数据读写的过程。
flags参数
flags参数和recv/send函数的flags参数的相同。具体参考:TCP数据读写
返回值
成功时候返回读写字节数,出错时候返回-1.