最近在查找网络运行程序中发送命令和接收到命令期间的时间延迟很大问题,想想在确保网络环境良好的前提下可能与程序中的一些逻辑,或者一些发送接收相关的阻塞有关,所以认识了下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:指