#include <winsock2.h> 函数原型: int send(int aID, const char *buf, int len, int flags); 返回值类型: 整型 返回值: 返回值小于0,socket报错。返回值等于0对方调用了close API来关闭连接,返回值大于0成功,返回值为发送的的数据长度 参数说明: 第一个参数aID,表示连接成功的套接字描述符。 注意:这一...
send会比较发送数据的buf长度和sockfd发送数据的缓冲区长度,如果len大于sockfd的发送长度,则send返回SOCKET_ERROR,如果发送缓冲区的大小足够,则将数据buf中的数据发送至发送缓冲区中,确认send函数将数据拷贝至发送换区中,另外,如果send检测发送缓冲区有数据但是还未发送,就比较该缓冲区的剩余空间和和len的大小,如果len大...
如果send函数拷贝成功,就返回实际拷贝的字节数;如果拷贝的过程中出现错误,send就返回SOCKET_ERROR;如果send在等待协议传送数据时网络断开的话,那么send函数也返回SOCKET_ERROR。 要注意,send函数把buffer中的数据成功拷贝到套接字的发送缓冲区中的剩余空间里面后,它就返回了,但是此时这些数据并不一定...
send发送数据实际上是将数据(应用层buf中的数据)拷贝到套接字sockfd的缓冲区(内核中的sockfd对应的发送缓冲区)中,内核中的发送缓存中的数据由协议(TCP,UDP没有发送缓冲区)传输。send函数将buf中的数据成功拷贝到发送缓冲区后就返回了,如果协议后续发送数据到接收端出现网络错误的话,那么下一个socket函数就会返回SOCK...
返回值:函数成功调用返回0,失败时返回非0。 说明:此函数是应用程序调用的第一个WinSock函数,只有在该函数调用成功后才能调用其他WinSock函数。 2.socket函数: 功能:为应用程序创建套接字。 格式:SOCKET socket(int af, int type, int protocol)。 参数:af-套接字使用的协议地址族,如果使用TCP或者UDP,只能使用AF...
Send函数的返回值有三类: (1)返回值=0: (2)返回值<0:发送失败,错误原因存于全局变量errno中 (3)返回值>0:表示发送的字节数(实际上是拷贝到发送缓冲中的字节数) 错误代码: EBADF 参数s 非合法的socket处理代码。 EFAULT 参数中有一指针指向无法存取的内存空间 ...
在进行网络编程中,经常会遇到一些奇怪的网络异常或错误,这些错误其实通过分析socket 的send和recv函数的返回值和错误码就可以得到具体的错误原因,进而可以对症下药解决网络问题。 send的返回值分析 recv的返回值分析 特别:返回值<0时并且(errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)的情况下认为...
send 函数返回值 大于0: 成功写入的数据长度(Byte); 等于0: 对端关闭连接; 等于-1: tcp窗口太小,数据暂时发不出去,也就是缓冲区满了,errno=EWOULDBLOCK或EAGIN 被信号中断,需要重试,errno=EINTR 出错 recv 函数返回值 大于0: 成功接收的数据长度(Byte); ...
recv的返回值<0时,检查errno,确定socket是否正常。 PS:UDP还有两个函数sendto和recvfrom。客户端在调用connect后,才能用send和recv,服务器端只能用sendto和recvfrom。 3.TCP和UDP UDP无连接,无顺序,自然不能代替TCP。 TCP是流式协议,需要应用层确认数据是否接受完整,也不能代替UDP。