- beter checking for dsiconnected socket for sensitive winsock

This commit is contained in:
SoftCoder 2015-12-30 18:29:27 -08:00
parent 42d3295e9b
commit 27ed0b88fe
4 changed files with 7 additions and 3 deletions

View File

@ -1887,7 +1887,7 @@ NetworkMessageType ClientInterface::waitForMessage(int waitMicroseconds)
msg = getNextMessageType(waitMicroseconds);
if(msg == nmtInvalid) {
if(chrono.getMillis() % 250 == 0 && isConnected() == false) {
if(getSocket() == NULL || (chrono.getMillis() % 250 == 0 && isConnected() == false)) {
if(getQuit() == false) {
//throw megaglest_runtime_error("Disconnected");
//sendTextMessage("Server has Disconnected.",-1);

View File

@ -184,6 +184,9 @@ NetworkMessageType NetworkInterface::getNextMessageType(int waitMilliseconds) {
// if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] PEEK WARNING, socket->getDataToRead() messageType = %d [size = %d], dataSize = %d\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__,messageType,sizeof(messageType),dataSize);
//}
if (socket->isSocketValid() == false) {
return nmtInvalid;
}
//sanity check new message type
if(messageType < 0 || messageType >= nmtCount) {
if(getConnectHasHandshaked() == true) {

View File

@ -50,7 +50,7 @@ bool NetworkMessage::receive(Socket* socket, void* data, int dataSize, bool tryR
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] WARNING, dataReceived = %d dataSize = %d\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__,dataReceived,dataSize);
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("\nIn [%s::%s Line: %d] WARNING, dataReceived = %d dataSize = %d\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__,dataReceived,dataSize);
if(socket != NULL && socket->getSocketId() > 0) {
if(socket != NULL && socket->isSocketValid() == true) {
throw megaglest_runtime_error("Error receiving NetworkMessage, dataReceived = " + intToStr(dataReceived) + ", dataSize = " + intToStr(dataSize));
}
else {
@ -75,7 +75,7 @@ void NetworkMessage::send(Socket* socket, const void* data, int dataSize) {
dump_packet("\nOUTGOING PACKET:\n",data, dataSize, true);
int sendResult = socket->send(data, dataSize);
if(sendResult != dataSize) {
if(socket != NULL && socket->getSocketId() > 0) {
if(socket != NULL && socket->isSocketValid() == true) {
char szBuf[8096]="";
snprintf(szBuf,8096,"Error sending NetworkMessage, sendResult = %d, dataSize = %d",sendResult,dataSize);
throw megaglest_runtime_error(szBuf);

View File

@ -1819,6 +1819,7 @@ bool Socket::isConnected() {
if(SystemFlags::VERBOSE_MODE_ENABLED) SystemFlags::OutputDebug(SystemFlags::debugError,"SOCKET DISCONNECTED In [%s::%s Line: %d] ERROR Peek failed, err = %d for socket: %d, error = %s, lastSocketError = %d\n",__FILE__,__FUNCTION__,__LINE__,err,sock,getLastSocketErrorFormattedText().c_str(),lastSocketError);
return false;
}
if (isSocketValid() == false) return false;
}
//otherwise the socket is connected