前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >read VS recv?关于 send 和 recv 的第四个参数 flag

read VS recv?关于 send 和 recv 的第四个参数 flag

作者头像
看、未来
发布2021-09-18 11:43:49
2.2K0
发布2021-09-18 11:43:49
举报
文章被收录于专栏:CSDN搜“看,未来”

哈哈,今晚备课的时候发现了这一点。

学Linux网络编程这么久,还真没注意到 read/write 和 recv/send之间有什么区别,于是就去研究了一下。

首先呢,recv/send 的第一个参数 socket s (int s)起这么个名字就已经能说明问题了吧,这俩函数也确实一般用于网络通信。

其次,就是 recv/send 相较于 read/write 这多出的第四个参数,以前都是说,默认填个0就好了,但是一直不知道为什么。


代码语言:javascript
复制
int send(int s, const void *msg, size_t len, int flags); 

flags取值有: 0: 与write()无异 MSG_DONTROUTE:告诉内核,目标主机在本地网络,不用查路由表 MSG_DONTWAIT:将单个I/O操作设置为非阻塞模式 MSG_OOB:指明发送的是带外信息

代码语言:javascript
复制
int recv(int s, void *buf, size_t len, int flags);

flags取值有: 0:常规操作,与read()相同 MSG_DONTWAIT:将单个I/O操作设置为非阻塞模式 MSG_OOB:指明发送的是带外信息 MSG_PEEK:可以查看可读的信息,在接收数据后不会将这些数据丢失 MSG_WAITALL:通知内核直到读到请求的数据字节数时,才返回。

代码语言:javascript
复制
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同上,不多说、


本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/08/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档