enet udp 分析

int flags);参数ss如果没有发生错误并且发送操作立即完成,WSASend()函数将返回0 。此时,CompletionRoutine应该已经被调度,一旦调用线程处于alertable状态,就会调用它 , 否则返回SOCKET_ERROR,通过WSAGetLastError获取详细的错误代码 , 错误代码WSA_IO_PENDING(其实是指没有错误)表示重叠操作已经提交成功(表示异步IO) , 后面会提示完成(这个完成不一定是传输成功,也不一定是问题) 。

1、socket编程中recvfrom没有收到 udp包(如网络不通时 recvfrom()返回在没有错误发生的情况下读取的字节数 。如果连接已中止,则返回0 。否则返回SOCKET_ERROR错误 , 应用程序可以通过WSAGetLastError()获取相应的错误代码 。错误代码:wsanotinialized:wsa startup()应该在使用此API之前成功调用 。WSAENETDOWN:WINDOWS的WINDOWS套接字实现检测到网络子系统失败 。

WSAEINTR:阻塞进程被WSACancelBlockingCall()取消 。WSAEINPROGRESS:被阻止的WINDOWS windows套接字调用正在运行 。WSAEINVAL: windows套接字未使用bind()绑定 。WSAENOTCONN:未连接windows套接字(仅适用于SOCK_STREAM类型) 。WSAENOTSOCK:描述符不是windows套接字 。

2、socket的send(thisfunctionsendsdataonaconnectedsocket . int send(SOCKETs,constcharFAR * buf,intlen , int flags);Parameterss简要描述向连接的windows套接字发送数据 。# includeintPASCALFARsend(SOCKETs , constcharFAR*buf,intlen,int flags);s:一个描述符,用于标识连接的windows套接字 。缓冲区:包含要发送数据的缓冲区 。Len:缓冲区中数据的长度 。标志:调用执行模式 。注意send()适用于连接的数据包或流式windows套接字数据 。
【enet udp 分析】IP数据包的最大长度在WSAStartup()调用返回的WSAData的iMaxUdpDg元素中 。如果数据太长而无法自动通过较低层协议,则会返回WSAEMSGSIZE错误,并且不会发送数据,请注意,send()调用的成功完成并不意味着数据传输已经到达 。如果传输系统的缓冲区空间不足以容纳要传输的数据,send()将会阻塞 , 除非windows sockets处于非阻塞I/O模式 。

    推荐阅读