函数的返回值为实际发送的字节数,如果返回SOCKET_ERROR,可以通过WSAGetLastError()获得错误原因。请看下面的示例:
int bwrote = sendto(sd, (char*)send_buf, packet_size, 0, (sockaddr*) &dest, sizeof(dest)); if (bwrote == SOCKET_ERROR) { //…发送失败 if(WSAGetLastError()==…) { //… } return - 1; } else if (bwrote < packet_size) { //…发送字节 < 欲发送字节 } |
Raw Socket接收报文
接收报文的函数为:
int recvfrom( SOCKET s, //套接字句柄 char* buf, //接收缓冲区 int len, //缓冲区字节数 int flags, //方式标志 struct sockaddr* from, //源地址 int* fromlen ); |
或
int recv( SOCKET s, //已经建立连接的套接字句柄 char* buf, int len, int flags ); |
recv()函数的第1个参数只能是一个已经建立连接的套接字句柄,所以这个函数就不再需要源地址参数输入。
函数的返回值为实际接收的字节数,如果返回SOCKET_ERROR,我们可以通过WSAGetLastError()函数获得错误原因。请看下面的示例:
int bread = recvfrom(sd, (char*)recv_buf, packet_size + sizeof(IPHeader), 0, (sockaddr*) &source, &fromlen); if (bread == SOCKET_ERROR) { //…读失败 if(WSAGetLastError()==WSAEMSGSIZE) { //…接收buffer太小 } return - 1; } |
共6页: 上一页 [1] [2] [3] 4 [5] [6] 下一页
|