From fad4fa09ba173a6be76954acdbdb158a6232d0b0 Mon Sep 17 00:00:00 2001 From: rubidium Date: Fri, 22 Nov 2013 21:41:19 +0000 Subject: (svn r26046) -Fix: handle a number of failure conditions from methods called in the network code --- src/network/core/tcp.cpp | 4 ++-- src/network/core/tcp_listen.h | 12 ++++++++---- src/network/core/udp.cpp | 4 +++- 3 files changed, 13 insertions(+), 7 deletions(-) (limited to 'src/network') diff --git a/src/network/core/tcp.cpp b/src/network/core/tcp.cpp index 8cfa2d60e..e68c354fc 100644 --- a/src/network/core/tcp.cpp +++ b/src/network/core/tcp.cpp @@ -237,9 +237,9 @@ bool NetworkTCPSocketHandler::CanSendReceive() tv.tv_sec = tv.tv_usec = 0; // don't block at all. #if !defined(__MORPHOS__) && !defined(__AMIGA__) - select(FD_SETSIZE, &read_fd, &write_fd, NULL, &tv); + if (select(FD_SETSIZE, &read_fd, &write_fd, NULL, &tv) < 0) return false; #else - WaitSelect(FD_SETSIZE, &read_fd, &write_fd, NULL, &tv, NULL); + if (WaitSelect(FD_SETSIZE, &read_fd, &write_fd, NULL, &tv, NULL) < 0) return false; #endif this->writable = !!FD_ISSET(this->sock, &write_fd); diff --git a/src/network/core/tcp_listen.h b/src/network/core/tcp_listen.h index 9fdf339c3..e6b589332 100644 --- a/src/network/core/tcp_listen.h +++ b/src/network/core/tcp_listen.h @@ -64,7 +64,9 @@ public: DEBUG(net, 1, "[%s] Banned ip tried to join (%s), refused", Tsocket::GetName(), *iter); - send(s, (const char*)p.buffer, p.size, 0); + if (send(s, (const char*)p.buffer, p.size, 0) < 0) { + DEBUG(net, 0, "send failed with error %d", GET_LAST_ERROR()); + } closesocket(s); break; } @@ -79,7 +81,9 @@ public: Packet p(Tfull_packet); p.PrepareToSend(); - send(s, (const char*)p.buffer, p.size, 0); + if (send(s, (const char*)p.buffer, p.size, 0) < 0) { + DEBUG(net, 0, "send failed with error %d", GET_LAST_ERROR()); + } closesocket(s); continue; @@ -115,9 +119,9 @@ public: tv.tv_sec = tv.tv_usec = 0; // don't block at all. #if !defined(__MORPHOS__) && !defined(__AMIGA__) - select(FD_SETSIZE, &read_fd, &write_fd, NULL, &tv); + if (select(FD_SETSIZE, &read_fd, &write_fd, NULL, &tv) < 0) return false; #else - WaitSelect(FD_SETSIZE, &read_fd, &write_fd, NULL, &tv, NULL); + if (WaitSelect(FD_SETSIZE, &read_fd, &write_fd, NULL, &tv, NULL) < 0) return false; #endif /* accept clients.. */ diff --git a/src/network/core/udp.cpp b/src/network/core/udp.cpp index ff6ecc6d1..f7abc7e35 100644 --- a/src/network/core/udp.cpp +++ b/src/network/core/udp.cpp @@ -96,7 +96,9 @@ void NetworkUDPSocketHandler::SendPacket(Packet *p, NetworkAddress *recv, bool a if (broadcast) { /* Enable broadcast */ unsigned long val = 1; - setsockopt(s->second, SOL_SOCKET, SO_BROADCAST, (char *) &val, sizeof(val)); + if (setsockopt(s->second, SOL_SOCKET, SO_BROADCAST, (char *) &val, sizeof(val)) < 0) { + DEBUG(net, 1, "[udp] setting broadcast failed with: %i", GET_LAST_ERROR()); + } } #endif -- cgit v1.2.3-54-g00ecf