连接的UDP接收异步异常有关问题
连接的UDP接收异步错误问题
在网上看见一篇文章,介绍连接的UDP接收异步错误,于是在自己电脑上建立了连接的UDP,使用send()函数发送数据,
代码如下:
运行发现,192.168.100.200是一个不存在的IP地址,但send()函数却没有返回SOCKET_ERROR错误,感觉send()函数只是将数据拷贝到发送缓冲区中就立即返回了,而无法捕获到ICMP这个异步错误,后来我用抓包工作抓了一下,发送的5个UDP数据包都能抓包,却没有抓到相应的ICMP数据包。
于是怀疑帖子中讲解的应该针对LINUX平台,在WinSock中,这种连接的UDP是无法捕获到异步错误,还是说我的理解或代码写的有问题,望大家指教一下!
------解决方案--------------------
udp是不可靠的,所以无法知道网络路由传输中错误,它只管发
------解决方案--------------------
upd就像是寄信,只要有明确的地址,就投递,而不管数据是否可达
在网上看见一篇文章,介绍连接的UDP接收异步错误,于是在自己电脑上建立了连接的UDP,使用send()函数发送数据,
代码如下:
//创建连接的UDP
struct sockaddr_in UdpAddr;
memset(&UdpAddr, 0, sizeof(UdpAddr));
UdpAddr.sin_addr.S_un.S_addr = inet_addr("192.168.100.200");
UdpAddr.sin_family = AF_INET;
UdpAddr.sin_port = htons(8888);
SOCKET UdpSocket = socket(AF_INET, SOCK_DGRAM, 0);
connect(UdpSocket, (struct sockaddr *)&UdpAddr, sizeof(struct sockaddr));
char szSendBuf[] = "HelloWorld";
for(int i = 0; i < 5; i++)
{
nRet = send(UdpSocket, szSendBuf, strlen(szSendBuf), 0);
if(SOCKET_ERROR == nRet)
{
printf("ErrorId:%d\n", WSAGetLastError());
}
Sleep(10);
}
运行发现,192.168.100.200是一个不存在的IP地址,但send()函数却没有返回SOCKET_ERROR错误,感觉send()函数只是将数据拷贝到发送缓冲区中就立即返回了,而无法捕获到ICMP这个异步错误,后来我用抓包工作抓了一下,发送的5个UDP数据包都能抓包,却没有抓到相应的ICMP数据包。
于是怀疑帖子中讲解的应该针对LINUX平台,在WinSock中,这种连接的UDP是无法捕获到异步错误,还是说我的理解或代码写的有问题,望大家指教一下!
------解决方案--------------------
udp是不可靠的,所以无法知道网络路由传输中错误,它只管发
------解决方案--------------------
upd就像是寄信,只要有明确的地址,就投递,而不管数据是否可达