认识recv()与send()

本文介绍了在网络编程中,recv()和send()函数的用途、原型、参数和执行流程,以及它们在处理数据发送和接收时的阻塞行为。send()函数将数据拷贝到发送缓冲区并可能返回立即,而实际发送由协议处理。recv()函数则等待数据到达并拷贝到接收缓冲区。返回值和错误处理也是讨论的重点。
摘要由CSDN通过智能技术生成

 最近在查找网络运行程序中发送命令和接收到命令期间的时间延迟很大问题,想想在确保网络环境良好的前提下可能与程序中的一些逻辑,或者一些发送接收相关的阻塞有关,所以认识了下recv()与send()函数,以便后续更好地找问题。
 这次总结主要借鉴以下的这篇博客深入解析说明,感谢:
http://blog.chinaunix.net/uid-23208702-id-131258.html
 同时更加详细的说明也可以查阅该篇博客:
http://www.360doc.com/content/13/1228/11/9305922_340725784.shtml

 首先先总结下send函数的相关内容。

send函数

函数功能

 send函数可以用于服务器向客户端发送数据,同样也可以使客户端向服务器发送数据。

原型

int send( SOCKET s_fd, const char* sendBuf, int len, int flags );

参数说明

 1、s_fd: 指的是发送端的套接字描述符。即当服务器发送时,指accept到的描述符;当客户端发送时指connect到的描述符;
 2、sendBuf: 指容纳发送内容的缓冲区,需要知道的是该部分缓冲区是指我们上层程序编写中自己定义的缓冲区;
 3、len: 表示sendBuf缓冲区中内容的长度,即要发送内容的字节数;
 4、flags: 一般这里我们写0,但情况这里做一个简单说明:
  0: 与write()无异;
  MSG_DONTROUTE:告诉内核,目标主机在本地网络,不用查路由表;
  MSG_DONTWAIT:将单个I/O操作设置为非阻塞模式;
  MSG_OOB:指

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值