Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/netserver.cc')
-rw-r--r--src/core/netserver.cc15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/core/netserver.cc b/src/core/netserver.cc
index b604f47..2859006 100644
--- a/src/core/netserver.cc
+++ b/src/core/netserver.cc
@@ -126,6 +126,10 @@ NetServer::~NetServer()
}
}
+void NetServer::abort() {
+ netserver_error = true;
+}
+
// remove disconnected clients
void NetServer::reap()
{
@@ -185,9 +189,14 @@ void NetServer::receive()
int nb = select(fd()+1, &readset, NULL, NULL, &timeout);
if (nb == -1) {
+#ifndef _WIN32
+ // ncurses needs SIGWINCH catched
+ if (errno == EINTR) {
+ return;
+ }
+#endif
con_error << "Network error on select()" << std::endl;
- //perror("select");
- abort();
+ this->abort();
return;
}
@@ -200,7 +209,7 @@ void NetServer::receive()
ssize_t bytes_received = ::recvfrom(fd(), recbuf, FRAMESIZE-1, 0, (struct sockaddr *)&client_addr, &client_addr_len);
if (bytes_received == -1) {
con_error << "Network error on recvfrom()!" << std::endl;
- abort();
+ this->abort();
return;
} else {
//con_debug << "Incoming data '" << recbuf << "'"<< bytes_received << " bytes" << std::endl;