From 834dcb91f4b7020b367e8359e05ea546ac7bae0e Mon Sep 17 00:00:00 2001 From: Youness Alaoui Date: Tue, 10 Nov 2009 14:27:03 -0500 Subject: [PATCH] Even for UDP sockets, we should handle EAGAIN errors because it can happen.. Apparently recvfrom can return EAGAIN on udp sockets if for example there's a bad checksum in the packet or some other similar error --- socket/udp-bsd.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/socket/udp-bsd.c b/socket/udp-bsd.c index db302ebb..f2fcb4dd 100644 --- a/socket/udp-bsd.c +++ b/socket/udp-bsd.c @@ -160,6 +160,15 @@ socket_recv (NiceSocket *sock, NiceAddress *from, guint len, gchar *buf) recvd = recvfrom (sock->fileno, buf, len, 0, (struct sockaddr *) &sa, &from_len); + if (recvd < 0) { +#ifdef G_OS_WIN32 + if (WSAGetLastError () == WSAEWOULDBLOCK) +#else + if (errno == EAGAIN || errno == EWOULDBLOCK) +#endif + return 0; + } + if (recvd > 0) nice_address_set_from_sockaddr (from, (struct sockaddr *)&sa); -- GitLab