summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2013-11-22 21:41:19 +0000
committerrubidium <rubidium@openttd.org>2013-11-22 21:41:19 +0000
commitfad4fa09ba173a6be76954acdbdb158a6232d0b0 (patch)
tree1db3633277a050360d5df5e01ee8d529ca33239e
parentb37d402b2ded835c1a9905958e40587601615309 (diff)
downloadopenttd-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.cpp4
-rw-r--r--src/network/core/tcp_listen.h12
-rw-r--r--src/network/core/udp.cpp4
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