From c988ef1ba57fc45882a4bf33c66db572745b5706 Mon Sep 17 00:00:00 2001 From: Ortluk Date: Sat, 7 Apr 2018 23:07:06 -0600 Subject: [PATCH 1/3] Fixed crash bug on client disconnect --- src/server.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/server.cpp b/src/server.cpp index e8ffbd9..b488109 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -77,7 +77,7 @@ bool Server::Connect(int port) bool Server::PollSockets() { static struct timeval tv; - + Socket* sclose = NULL; // copy the permanent descriptor set memcpy(&rSet, &fSet, sizeof(fd_set)); @@ -92,13 +92,19 @@ bool Server::PollSockets() for (Socket* sock: socketList) { + // if previous socket marked for close, then close it + if (sclose) + { + CloseSocket(sclose); + sclose = NULL; //reset close pointer + } // attempt to read from this socket if pending incoming data if (FD_ISSET(sock->GetControl(), &rSet)) { - // if read fails, close the connection + // if read fails, close the connection, after iterater advances if (sock->Read() == false) - CloseSocket(sock); + sclose = sock; } } From cad13a32789a7c46fb0ec78a1d6aa99f819f2ca4 Mon Sep 17 00:00:00 2001 From: ortluk <38172881+ortluk@users.noreply.github.com> Date: Wed, 25 Apr 2018 20:28:27 -0600 Subject: [PATCH 2/3] Update server.cpp added a check for last list entry needing closed, and handling that. --- src/server.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/server.cpp b/src/server.cpp index b488109..762296d 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -104,7 +104,15 @@ bool Server::PollSockets() // if read fails, close the connection, after iterater advances if (sock->Read() == false) - sclose = sock; + { + if(sock = socketList.back()) + { + CloseSocket(sock); + } + else + { + sclose = sock; + } } } From c28fb6278a169d5346d4cba314ffbae89b1f6d6c Mon Sep 17 00:00:00 2001 From: ortluk <38172881+ortluk@users.noreply.github.com> Date: Wed, 25 Apr 2018 20:29:43 -0600 Subject: [PATCH 3/3] Update server.cpp --- src/server.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server.cpp b/src/server.cpp index 762296d..0ebeec0 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -105,7 +105,7 @@ bool Server::PollSockets() // if read fails, close the connection, after iterater advances if (sock->Read() == false) { - if(sock = socketList.back()) + if(sock == socketList.back()) { CloseSocket(sock); }