send函数
int send(SOCKET s,
参数描述:
- SOCKET s
发送端套接字描述符 - const char *buf
应用程序要发送的数据的缓冲区(想要发送的数据) - int len
实际要发送的字节数 - int flags
一般置为0即可
检查buf长度是否大于socket缓冲区长度,是,返回SOCKET_ERROR
1)如果TCP正在发送数据,等待发送完成。如果等待过程中网络断开,返回SOCKET_ERROR
2)没有数据发送, 发送数据buf len 大于socket缓冲区剩余空间 a)同步 等待发送缓冲区数据全部发送完成,buf数据copy到缓冲区 b)非阻塞返回SOCKET_ERROR
发送数据buf len小于socket缓冲区剩余空间,把buf数据拷贝到socket剩余发送缓冲区,如果copy出现错误 返回SOCKET_ERROR
数据被拷贝到socket缓冲区,并不代表已经发送到接受端。如果发送数据的过程当中网络异常。下一个socket操作返回SOCKET_ERROR
除了send以外的操作都需要等待发送缓冲区的的数据发送完成才能操作
recv函数:
int recv (SOCKET s, char* buf
- SOCKET s
发送端套接字描述符 - const char *buf
应用程序存放接收的数据的缓冲区 - int len
buf的长度 - int flags
一般置为0即可
1)如果tcp在发送数据,等待发送缓冲区的数据全部发送完成。发送过程当中网络异常返回SOCKET_ERROR
2)socket接收缓冲区有数据,把数据取到buf当中,如果一次取不完分多次取
socket接收缓冲区没有数据或者TCP正在接受数据,a)同步情况下等待TCP接收到数据,接收成功返回接收字节数。网络断开发挥0
拷贝错误返回SOCKET_ERROR
b)异步情况下返回SOCKET_ERROR