在回显程序中,如果服务器进程没有运行,当我们在客户端键入一行文本时,那么什么也不会发生。客户永远阻塞于它的recvfrom调用,等待一个永远不会出现的服务器应答。抓包查看此时服务器和客户端的交互,可以发现在arp交互以后,服务器向客户端发送了一个ICMP端口不可到达的报文,不过这个报文不返回给客户进程。
ICMP端口不可到达是一个异步错误,它由sendto引起,但是sendto本身却返回成功,因为,sendto只是判断在接口输出队列中具有存放所形成IP数据报的空间,ICMP端口不可到达后来才返回。
对于UDP而言,由它引发的异步错误并不返回给它,除非它为已连接的(connected)。
阅读(1274) | 评论(0) | 转发(0) |