read VS recv?关于 send 和 recv 的第四个参数 flag
Posted 看,未来
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了read VS recv?关于 send 和 recv 的第四个参数 flag相关的知识,希望对你有一定的参考价值。
哈哈,今晚备课的时候发现了这一点。
学Linux网络编程这么久,还真没注意到 read/write 和 recv/send之间有什么区别,于是就去研究了一下。
首先呢,recv/send 的第一个参数 socket s (int s)起这么个名字就已经能说明问题了吧,这俩函数也确实一般用于网络通信。
其次,就是 recv/send 相较于 read/write 这多出的第四个参数,以前都是说,默认填个0就好了,但是一直不知道为什么。
int send(int s, const void *msg, size_t len, int flags);
flags取值有:
0: 与write()无异
MSG_DONTROUTE:告诉内核,目标主机在本地网络,不用查路由表
MSG_DONTWAIT:将单个I/O操作设置为非阻塞模式
MSG_OOB:指明发送的是带外信息
int recv(int s, void *buf, size_t len, int flags);
flags取值有:
0:常规操作,与read()相同
MSG_DONTWAIT:将单个I/O操作设置为非阻塞模式
MSG_OOB:指明发送的是带外信息
MSG_PEEK:可以查看可读的信息,在接收数据后不会将这些数据丢失
MSG_WAITALL:通知内核直到读到请求的数据字节数时,才返回。
int recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);
flags取值有:
0:常规操作,与read()相同
MSG_OOB:指明发送的是带外信息
MSG_PEEK:可以查看可读的信息,在接收数据后不会将这些数据丢失
sendto同上,不多说、
以上是关于read VS recv?关于 send 和 recv 的第四个参数 flag的主要内容,如果未能解决你的问题,请参考以下文章
read() 和 recv() 以及 send() 和 write() 之间有啥区别?
套接字I/O函数write/read writev/readv send/recv sendto/recvfrom sendmsg/recvmsg