最近在使用windows socket编程时发现一个奇怪的现象。select 表明udp socket可读,调用recvfrom,却返回错误。
WSAGetLastError()读到的错误码是 10054 WSAECONNRESET。很奇怪,udp是无连接的,怎么会connection reset呢。
抓包显示,原来是这个udp套接字在前一个recvfrom()之后,回复一个包,但是接收方已经把socket关闭了,
因此回复了一个一个port unreachable。windows,将这个消息传递了用户层。