diff options
author | rubidium <rubidium@openttd.org> | 2013-11-22 21:41:19 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2013-11-22 21:41:19 +0000 |
commit | fad4fa09ba173a6be76954acdbdb158a6232d0b0 (patch) | |
tree | 1db3633277a050360d5df5e01ee8d529ca33239e | |
parent | b37d402b2ded835c1a9905958e40587601615309 (diff) | |
download | openttd-fad4fa09ba173a6be76954acdbdb158a6232d0b0.tar.xz |
(svn r26046) -Fix: handle a number of failure conditions from methods called in the network code
-rw-r--r-- | src/network/core/tcp.cpp | 4 | ||||
-rw-r--r-- | src/network/core/tcp_listen.h | 12 | ||||
-rw-r--r-- | src/network/core/udp.cpp | 4 |
3 files changed, 13 insertions, 7 deletions
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 |