Does doing a connect() call affect the receive behaviour of the socket?
From Richard Stevens (rstevens@noao.edu): Yes, in two ways. First, only datagrams from your “connected peer” are returned. All others arriving at your port are not delivered to you. But most importantly, a UDP socket must be connected to receive ICMP errors. Pp. 748-749 of “TCP/IP Illustrated, Volume 2” give all the gory details on why this is so. 4. How can I read ICMP errors from “connected” UDP sockets? If the target machine discards the message because there is no process reading on the requested port number, it sends an ICMP message to your machine which will cause the next system call on the socket to return ECONNREFUSED. Since delivery of ICMP messages is not guarenteed you may not recieve this notification on the first transaction. Remember that your socket must be “connected” in order to receive the ICMP errors. I’ve been told, and Alan Cox has verified that Linux will return them on “unconnected” sockets. This may cause porting problems if your application isn’t ready for it,