diff --git a/src/CNProtocol.cpp b/src/CNProtocol.cpp index d41e007..ad724d6 100644 --- a/src/CNProtocol.cpp +++ b/src/CNProtocol.cpp @@ -76,8 +76,12 @@ bool CNSocket::sendData(uint8_t* data, int size) { while (sentBytes < size) { int sent = send(sock, (buffer_t*)(data + sentBytes), size - sentBytes, 0); // no flags defined - if (SOCKETERROR(sent)) + if (SOCKETERROR(sent)) { + if (errno == 11) + continue; // try again + std::cout << "[FATAL] SOCKET ERROR: " << errno << std::endl; return false; // error occured while sending bytes + } sentBytes += sent; } @@ -116,6 +120,11 @@ void CNSocket::kill() { } void CNSocket::sendPacket(CNPacketData* pak) { + if (!alive) { + delete pak; + return; + } + int tmpSize = pak->size + sizeof(uint32_t); uint8_t* tmpBuf = (uint8_t*)xmalloc(tmpSize); @@ -127,10 +136,12 @@ void CNSocket::sendPacket(CNPacketData* pak) { CNSocketEncryption::encryptData((uint8_t*)tmpBuf, (uint8_t*)(&pak->key), tmpSize); // send packet size - sendData((uint8_t*)&tmpSize, sizeof(uint32_t)); + if (!sendData((uint8_t*)&tmpSize, sizeof(uint32_t))) + kill(); // send packet data! - sendData(tmpBuf, tmpSize); + if (alive && !sendData(tmpBuf, tmpSize)) + kill(); delete pak; free(tmpBuf); // free tmp buffer