diff --git a/source/server/Client.cpp b/source/server/Client.cpp index adfbff8..33b3e92 100644 --- a/source/server/Client.cpp +++ b/source/server/Client.cpp @@ -245,30 +245,34 @@ bool Client::startConnection() { Logger::log("Sucessful Connection. Waiting to recieve init packet.\n"); + bool waitingForInitPacket = true; // wait for client init packet - while (true) { + while (waitingForInitPacket) { if (mSocket->RECV()) { - Packet* curPacket = mSocket->mPacketQueue.popFront(); + if(!mSocket->mPacketQueue.isEmpty()){ - if (curPacket->mType == PacketType::CLIENTINIT) { - InitPacket* initPacket = (InitPacket*)curPacket; + Packet* curPacket = mSocket->mPacketQueue.popFront(); - Logger::log("Server Max Player Size: %d\n", initPacket->maxPlayers); + if (curPacket->mType == PacketType::CLIENTINIT) { + InitPacket* initPacket = (InitPacket*)curPacket; - maxPuppets = initPacket->maxPlayers - 1; - } else { - Logger::log("First Packet was not Init!\n"); - mIsConnectionActive = false; + Logger::log("Server Max Player Size: %d\n", initPacket->maxPlayers); + + maxPuppets = initPacket->maxPlayers - 1; + } else { + Logger::log("First Packet was not Init!\n"); + mIsConnectionActive = false; + } + + free(curPacket); + waitingForInitPacket = false; } - free(curPacket); - } else { Logger::log("Recieve failed! Stopping Connection.\n"); mIsConnectionActive = false; + waitingForInitPacket = false; } - - break; } } diff --git a/source/server/SocketBase.cpp b/source/server/SocketBase.cpp index 4dbe7ac..9ffb93c 100644 --- a/source/server/SocketBase.cpp +++ b/source/server/SocketBase.cpp @@ -7,7 +7,7 @@ SocketBase::SocketBase(const char *name) { strcpy(this->sockName, name); - this->sock_flags = 0; + this->sock_flags = 0x80; } const char *SocketBase::getStateChar() { diff --git a/source/server/SocketClient.cpp b/source/server/SocketClient.cpp index 041984a..f60952d 100644 --- a/source/server/SocketClient.cpp +++ b/source/server/SocketClient.cpp @@ -82,7 +82,7 @@ bool SocketClient::SEND(Packet *packet) { if (packet->mType != PLAYERINF && packet->mType != HACKCAPINF) Logger::log("Sending packet: %s\n", packetNames[packet->mType]); - if ((valread = nn::socket::Send(this->socket_log_socket, buffer, packet->mPacketSize + sizeof(Packet), this->sock_flags) > 0)) { + if ((valread = nn::socket::Send(this->socket_log_socket, buffer, packet->mPacketSize + sizeof(Packet), 0) > 0)) { return true; } else { Logger::log("Failed to Fully Send Packet! Result: %d Type: %s Packet Size: %d\n", valread, packetNames[packet->mType], packet->mPacketSize); @@ -115,9 +115,13 @@ bool SocketClient::RECV() { if(result > 0) { valread += result; } else { - Logger::log("Header Read Failed! Value: %d Total Read: %d\n", result, valread); - this->closeSocket(); - return false; + if(this->socket_errno==11){ + return true; + } else { + Logger::log("Header Read Failed! Value: %d Total Read: %d\n", result, valread); + this->closeSocket(); + return false; + } } }