69-recv 和 send 函数

recv 和 send 函数专门用于套接字描述符的,相比于 read 和 write,前三个参数一模一样。recv 和 send 只多了一个参数 —— flags.

如果你还记得 recvfrom 和 sendto,你应该能回忆起它们也有一个参数 flags,那时候没有讲解这个标志位,是因为放到这篇文章一起讲了。

1. recv 和 send

  • 函数原型
 ssize_t recv(int sockfd, void *buf, size_t len, int flags);
 ssize_t send(int sockfd, const void *buf, size_t len, int flags);
  • 参数 flags

前面的在个参数和 read、write 没有区别,就不多说了,这里重点看 flags 参数。

flags 是一个组合标志选项,因为它的名字是以 s 结尾。它有很多可选项,这里只说常用的几种,更多的选项请参数 man 手册。

选项说明
MSG_DONTROUTE告诉内核目的主机在直连的本地网络上(同一网段),不要使用网关将数据包路由出去 (仅支持 send 和 sendto 函数
MSG_DONTWAIT临时将套接字描述符设置成非阻塞(支持 recv 和 send
MSG_OOB对于 send,表示即将发送带外数据(out-of-band data);对于 recv 来说,表示即将读入带外数据(支持 recv 和 send
MSG_PEEK查看可读取的数据,返回后内核不会将已读取的数据从接收缓冲区中删除。(仅支持 recv 和 recvfrom 函数
MSG_WAITALL指定该标志,就相当于 readn 函数。(仅支持 recv 和 recvfrom 函数

这些标志位对我们来说并没有什么难度,以后我们确实要用到它的时候,再结合代码分析。

2. 总结

  • 理解 recv 和 send 常用的标志位
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值