- attempt to fix socket issues causing hangs
This commit is contained in:
parent
c9fb0160dc
commit
9792b9695b
|
@ -872,7 +872,7 @@ void ClientInterface::updateLobby() {
|
||||||
//printf("#1 Got new game setup playerIndex = %d!\n",playerIndex);
|
//printf("#1 Got new game setup playerIndex = %d!\n",playerIndex);
|
||||||
|
|
||||||
NetworkMessageLaunch networkMessageLaunch;
|
NetworkMessageLaunch networkMessageLaunch;
|
||||||
if(receiveMessage(&networkMessageLaunch)) {
|
if(receiveMessage(&networkMessageLaunch, networkMessageType)) {
|
||||||
this->setLastPingInfoToNow();
|
this->setLastPingInfoToNow();
|
||||||
|
|
||||||
if(networkMessageLaunch.getMessageType() == nmtLaunch) {
|
if(networkMessageLaunch.getMessageType() == nmtLaunch) {
|
||||||
|
@ -1232,7 +1232,7 @@ void ClientInterface::updateFrame(int *checkFrame) {
|
||||||
//printf("#2 Got new game setup playerIndex = %d!\n",playerIndex);
|
//printf("#2 Got new game setup playerIndex = %d!\n",playerIndex);
|
||||||
|
|
||||||
NetworkMessageLaunch networkMessageLaunch;
|
NetworkMessageLaunch networkMessageLaunch;
|
||||||
if(receiveMessage(&networkMessageLaunch)) {
|
if(receiveMessage(&networkMessageLaunch,networkMessageType)) {
|
||||||
|
|
||||||
if(networkMessageLaunch.getMessageType() == nmtLaunch) {
|
if(networkMessageLaunch.getMessageType() == nmtLaunch) {
|
||||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Lined: %d] got nmtLaunch\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__);
|
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Lined: %d] got nmtLaunch\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__);
|
||||||
|
|
|
@ -117,11 +117,11 @@ void NetworkInterface::sendMessage(NetworkMessage* networkMessage){
|
||||||
networkMessage->send(socket);
|
networkMessage->send(socket);
|
||||||
}
|
}
|
||||||
|
|
||||||
NetworkMessageType NetworkInterface::getNextMessageType(int waitMilliseconds)
|
NetworkMessageType NetworkInterface::getNextMessageType(int waitMilliseconds) {
|
||||||
{
|
|
||||||
Socket* socket= getSocket(false);
|
Socket* socket= getSocket(false);
|
||||||
int8 messageType= nmtInvalid;
|
int8 messageType= nmtInvalid;
|
||||||
|
|
||||||
|
/*
|
||||||
if(socket != NULL &&
|
if(socket != NULL &&
|
||||||
((waitMilliseconds <= 0 && socket->hasDataToRead() == true) ||
|
((waitMilliseconds <= 0 && socket->hasDataToRead() == true) ||
|
||||||
(waitMilliseconds > 0 && socket->hasDataToReadWithWait(waitMilliseconds) == true))) {
|
(waitMilliseconds > 0 && socket->hasDataToReadWithWait(waitMilliseconds) == true))) {
|
||||||
|
@ -150,10 +150,54 @@ NetworkMessageType NetworkInterface::getNextMessageType(int waitMilliseconds)
|
||||||
}
|
}
|
||||||
|
|
||||||
return static_cast<NetworkMessageType>(messageType);
|
return static_cast<NetworkMessageType>(messageType);
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
// According to here: https://support.microsoft.com/en-us/kb/192599
|
||||||
|
// its a terrible sin to use MSG_PEEK so lets try an alternative
|
||||||
|
|
||||||
|
/*
|
||||||
|
int bytesReceived = socket->receive(&messageType, sizeof(messageType), true);
|
||||||
|
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] socket->getDataToRead() iPeek = %d, messageType = %d [size = %d]\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__,bytesReceived,messageType,sizeof(messageType));
|
||||||
|
|
||||||
|
return static_cast<NetworkMessageType>(messageType);
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
if(socket != NULL &&
|
||||||
|
((waitMilliseconds <= 0 && socket->hasDataToRead() == true) ||
|
||||||
|
(waitMilliseconds > 0 && socket->hasDataToReadWithWait(waitMilliseconds) == true))) {
|
||||||
|
//peek message type
|
||||||
|
int dataSize = socket->getDataToRead();
|
||||||
|
if(dataSize >= (int)sizeof(messageType)) {
|
||||||
|
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] socket->getDataToRead() dataSize = %d\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__,dataSize);
|
||||||
|
|
||||||
|
//int iPeek = socket->peek(&messageType, sizeof(messageType));
|
||||||
|
//if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] socket->getDataToRead() iPeek = %d, messageType = %d [size = %d]\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__,iPeek,messageType,sizeof(messageType));
|
||||||
|
|
||||||
|
int bytesReceived = socket->receive(&messageType, sizeof(messageType), true);
|
||||||
|
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] socket->getDataToRead() iPeek = %d, messageType = %d [size = %d]\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__,bytesReceived,messageType,sizeof(messageType));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
//sanity check new message type
|
||||||
|
if(messageType < 0 || messageType >= nmtCount) {
|
||||||
|
if(getConnectHasHandshaked() == true) {
|
||||||
|
throw megaglest_runtime_error("Invalid message type: " + intToStr(messageType));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] Invalid message type = %d (no packet handshake yet so ignored)\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__,messageType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return static_cast<NetworkMessageType>(messageType);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NetworkInterface::receiveMessage(NetworkMessage* networkMessage){
|
bool NetworkInterface::receiveMessage(NetworkMessage* networkMessage){
|
||||||
|
|
||||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s]\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__);
|
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s]\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__);
|
||||||
|
|
||||||
Socket* socket= getSocket(false);
|
Socket* socket= getSocket(false);
|
||||||
|
@ -161,6 +205,14 @@ bool NetworkInterface::receiveMessage(NetworkMessage* networkMessage){
|
||||||
return networkMessage->receive(socket);
|
return networkMessage->receive(socket);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool NetworkInterface::receiveMessage(NetworkMessage* networkMessage, NetworkMessageType type) {
|
||||||
|
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s]\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__);
|
||||||
|
|
||||||
|
Socket* socket = getSocket(false);
|
||||||
|
|
||||||
|
return networkMessage->receive(socket, type);
|
||||||
|
}
|
||||||
|
|
||||||
bool NetworkInterface::isConnected(){
|
bool NetworkInterface::isConnected(){
|
||||||
bool result = (getSocket()!=NULL && getSocket()->isConnected());
|
bool result = (getSocket()!=NULL && getSocket()->isConnected());
|
||||||
return result;
|
return result;
|
||||||
|
|
|
@ -238,6 +238,7 @@ public:
|
||||||
virtual void sendMessage(NetworkMessage* networkMessage);
|
virtual void sendMessage(NetworkMessage* networkMessage);
|
||||||
NetworkMessageType getNextMessageType(int waitMilliseconds=0);
|
NetworkMessageType getNextMessageType(int waitMilliseconds=0);
|
||||||
bool receiveMessage(NetworkMessage* networkMessage);
|
bool receiveMessage(NetworkMessage* networkMessage);
|
||||||
|
bool receiveMessage(NetworkMessage* networkMessage, NetworkMessageType type);
|
||||||
|
|
||||||
virtual bool isConnected();
|
virtual bool isConnected();
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -109,13 +109,17 @@ public:
|
||||||
static bool useOldProtocol;
|
static bool useOldProtocol;
|
||||||
virtual ~NetworkMessage(){}
|
virtual ~NetworkMessage(){}
|
||||||
virtual bool receive(Socket* socket)= 0;
|
virtual bool receive(Socket* socket)= 0;
|
||||||
|
virtual bool receive(Socket* socket, NetworkMessageType type) { return receive(socket); };
|
||||||
|
|
||||||
virtual void send(Socket* socket) = 0;
|
virtual void send(Socket* socket) = 0;
|
||||||
virtual size_t getDataSize() const = 0;
|
virtual size_t getDataSize() const = 0;
|
||||||
|
|
||||||
|
virtual NetworkMessageType getNetworkMessageType() const = 0;
|
||||||
|
|
||||||
void dump_packet(string label, const void* data, int dataSize, bool isSend);
|
void dump_packet(string label, const void* data, int dataSize, bool isSend);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
//bool peek(Socket* socket, void* data, int dataSize);
|
||||||
bool receive(Socket* socket, void* data, int dataSize,bool tryReceiveUntilDataSizeMet);
|
bool receive(Socket* socket, void* data, int dataSize,bool tryReceiveUntilDataSizeMet);
|
||||||
void send(Socket* socket, const void* data, int dataSize);
|
void send(Socket* socket, const void* data, int dataSize);
|
||||||
|
|
||||||
|
@ -140,8 +144,8 @@ private:
|
||||||
static const int maxSmallStringSize= 60;
|
static const int maxSmallStringSize= 60;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
int8 messageType;
|
||||||
struct Data {
|
struct Data {
|
||||||
int8 messageType;
|
|
||||||
int32 sessionId;
|
int32 sessionId;
|
||||||
NetworkString<maxVersionStringSize> versionString;
|
NetworkString<maxVersionStringSize> versionString;
|
||||||
NetworkString<maxNameSize> name;
|
NetworkString<maxNameSize> name;
|
||||||
|
@ -154,6 +158,7 @@ private:
|
||||||
NetworkString<maxSmallStringSize> playerUUID;
|
NetworkString<maxSmallStringSize> playerUUID;
|
||||||
NetworkString<maxSmallStringSize> platform;
|
NetworkString<maxSmallStringSize> platform;
|
||||||
};
|
};
|
||||||
|
|
||||||
void toEndian();
|
void toEndian();
|
||||||
void fromEndian();
|
void fromEndian();
|
||||||
|
|
||||||
|
@ -175,9 +180,12 @@ public:
|
||||||
virtual void unpackMessage(unsigned char *buf);
|
virtual void unpackMessage(unsigned char *buf);
|
||||||
virtual unsigned char * packMessage();
|
virtual unsigned char * packMessage();
|
||||||
|
|
||||||
|
|
||||||
virtual size_t getDataSize() const { return sizeof(Data); }
|
virtual size_t getDataSize() const { return sizeof(Data); }
|
||||||
|
|
||||||
|
virtual NetworkMessageType getNetworkMessageType() const {
|
||||||
|
return nmtIntro;
|
||||||
|
}
|
||||||
|
|
||||||
int32 getSessionId() const { return data.sessionId;}
|
int32 getSessionId() const { return data.sessionId;}
|
||||||
string getVersionString() const { return data.versionString.getString(); }
|
string getVersionString() const { return data.versionString.getString(); }
|
||||||
string getName() const { return data.name.getString(); }
|
string getName() const { return data.name.getString(); }
|
||||||
|
@ -207,8 +215,8 @@ public:
|
||||||
#pragma pack(push, 1)
|
#pragma pack(push, 1)
|
||||||
class NetworkMessagePing: public NetworkMessage{
|
class NetworkMessagePing: public NetworkMessage{
|
||||||
private:
|
private:
|
||||||
|
int8 messageType;
|
||||||
struct Data{
|
struct Data{
|
||||||
int8 messageType;
|
|
||||||
int32 pingFrequency;
|
int32 pingFrequency;
|
||||||
int64 pingTime;
|
int64 pingTime;
|
||||||
};
|
};
|
||||||
|
@ -231,6 +239,10 @@ public:
|
||||||
|
|
||||||
virtual size_t getDataSize() const { return sizeof(Data); }
|
virtual size_t getDataSize() const { return sizeof(Data); }
|
||||||
|
|
||||||
|
virtual NetworkMessageType getNetworkMessageType() const {
|
||||||
|
return nmtPing;
|
||||||
|
}
|
||||||
|
|
||||||
int32 getPingFrequency() const {return data.pingFrequency;}
|
int32 getPingFrequency() const {return data.pingFrequency;}
|
||||||
int64 getPingTime() const {return data.pingTime;}
|
int64 getPingTime() const {return data.pingTime;}
|
||||||
int64 getPingReceivedLocalTime() const { return pingReceivedLocalTime; }
|
int64 getPingReceivedLocalTime() const { return pingReceivedLocalTime; }
|
||||||
|
@ -250,8 +262,8 @@ public:
|
||||||
#pragma pack(push, 1)
|
#pragma pack(push, 1)
|
||||||
class NetworkMessageReady: public NetworkMessage{
|
class NetworkMessageReady: public NetworkMessage{
|
||||||
private:
|
private:
|
||||||
|
int8 messageType;
|
||||||
struct Data{
|
struct Data{
|
||||||
int8 messageType;
|
|
||||||
uint32 checksum;
|
uint32 checksum;
|
||||||
};
|
};
|
||||||
void toEndian();
|
void toEndian();
|
||||||
|
@ -272,6 +284,10 @@ public:
|
||||||
|
|
||||||
virtual size_t getDataSize() const { return sizeof(Data); }
|
virtual size_t getDataSize() const { return sizeof(Data); }
|
||||||
|
|
||||||
|
virtual NetworkMessageType getNetworkMessageType() const {
|
||||||
|
return nmtReady;
|
||||||
|
}
|
||||||
|
|
||||||
uint32 getChecksum() const {return data.checksum;}
|
uint32 getChecksum() const {return data.checksum;}
|
||||||
|
|
||||||
virtual bool receive(Socket* socket);
|
virtual bool receive(Socket* socket);
|
||||||
|
@ -294,8 +310,9 @@ private:
|
||||||
static const int maxFactionCRCCount= 20;
|
static const int maxFactionCRCCount= 20;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
int8 messageType;
|
||||||
struct Data{
|
struct Data{
|
||||||
int8 messageType;
|
|
||||||
NetworkString<maxStringSize> description;
|
NetworkString<maxStringSize> description;
|
||||||
NetworkString<maxSmallStringSize> map;
|
NetworkString<maxSmallStringSize> map;
|
||||||
NetworkString<maxSmallStringSize> tileset;
|
NetworkString<maxSmallStringSize> tileset;
|
||||||
|
@ -362,8 +379,12 @@ public:
|
||||||
|
|
||||||
virtual size_t getDataSize() const { return sizeof(Data); }
|
virtual size_t getDataSize() const { return sizeof(Data); }
|
||||||
|
|
||||||
|
virtual NetworkMessageType getNetworkMessageType() const {
|
||||||
|
return nmtLaunch;
|
||||||
|
}
|
||||||
|
|
||||||
void buildGameSettings(GameSettings *gameSettings) const;
|
void buildGameSettings(GameSettings *gameSettings) const;
|
||||||
int getMessageType() const { return data.messageType; }
|
int getMessageType() const { return messageType; }
|
||||||
|
|
||||||
int getMapCRC() const { return data.mapCRC; }
|
int getMapCRC() const { return data.mapCRC; }
|
||||||
int getTilesetCRC() const { return data.tilesetCRC; }
|
int getTilesetCRC() const { return data.tilesetCRC; }
|
||||||
|
@ -371,6 +392,8 @@ public:
|
||||||
vector<pair<string,uint32> > getFactionCRCList() const;
|
vector<pair<string,uint32> > getFactionCRCList() const;
|
||||||
|
|
||||||
virtual bool receive(Socket* socket);
|
virtual bool receive(Socket* socket);
|
||||||
|
virtual bool receive(Socket* socket, NetworkMessageType type);
|
||||||
|
|
||||||
virtual void send(Socket* socket);
|
virtual void send(Socket* socket);
|
||||||
};
|
};
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
@ -385,8 +408,9 @@ public:
|
||||||
class NetworkMessageCommandList: public NetworkMessage {
|
class NetworkMessageCommandList: public NetworkMessage {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
struct DataHeader {
|
struct DataHeader {
|
||||||
int8 messageType;
|
|
||||||
uint16 commandCount;
|
uint16 commandCount;
|
||||||
int32 frameCount;
|
int32 frameCount;
|
||||||
uint32 networkPlayerFactionCRC[GameConstants::maxPlayers];
|
uint32 networkPlayerFactionCRC[GameConstants::maxPlayers];
|
||||||
|
@ -395,11 +419,12 @@ private:
|
||||||
static const int32 commandListHeaderSize = sizeof(DataHeader);
|
static const int32 commandListHeaderSize = sizeof(DataHeader);
|
||||||
|
|
||||||
struct Data {
|
struct Data {
|
||||||
|
int8 messageType;
|
||||||
DataHeader header;
|
DataHeader header;
|
||||||
std::vector<NetworkCommand> commands;
|
std::vector<NetworkCommand> commands;
|
||||||
};
|
};
|
||||||
void init(Data &data_ref) {
|
void init(Data &data_ref) {
|
||||||
data_ref.header.messageType = 0;
|
data_ref.messageType = 0;
|
||||||
data_ref.header.commandCount = 0;
|
data_ref.header.commandCount = 0;
|
||||||
data_ref.header.frameCount = 0;
|
data_ref.header.frameCount = 0;
|
||||||
for(int index = 0; index < GameConstants::maxPlayers; ++index) {
|
for(int index = 0; index < GameConstants::maxPlayers; ++index) {
|
||||||
|
@ -435,6 +460,10 @@ public:
|
||||||
|
|
||||||
virtual size_t getDataSize() const { return sizeof(Data); }
|
virtual size_t getDataSize() const { return sizeof(Data); }
|
||||||
|
|
||||||
|
virtual NetworkMessageType getNetworkMessageType() const {
|
||||||
|
return nmtCommandList;
|
||||||
|
}
|
||||||
|
|
||||||
bool addCommand(const NetworkCommand* networkCommand);
|
bool addCommand(const NetworkCommand* networkCommand);
|
||||||
|
|
||||||
void clear() {data.header.commandCount= 0;}
|
void clear() {data.header.commandCount= 0;}
|
||||||
|
@ -462,8 +491,9 @@ private:
|
||||||
static const int maxTextStringSize= 500;
|
static const int maxTextStringSize= 500;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
int8 messageType;
|
||||||
struct Data{
|
struct Data{
|
||||||
int8 messageType;
|
|
||||||
NetworkString<maxTextStringSize> text;
|
NetworkString<maxTextStringSize> text;
|
||||||
int8 teamIndex;
|
int8 teamIndex;
|
||||||
int8 playerIndex;
|
int8 playerIndex;
|
||||||
|
@ -488,6 +518,10 @@ public:
|
||||||
|
|
||||||
virtual size_t getDataSize() const { return sizeof(Data); }
|
virtual size_t getDataSize() const { return sizeof(Data); }
|
||||||
|
|
||||||
|
virtual NetworkMessageType getNetworkMessageType() const {
|
||||||
|
return nmtText;
|
||||||
|
}
|
||||||
|
|
||||||
string getText() const {return data.text.getString();}
|
string getText() const {return data.text.getString();}
|
||||||
int getTeamIndex() const {return data.teamIndex;}
|
int getTeamIndex() const {return data.teamIndex;}
|
||||||
int getPlayerIndex() const {return data.playerIndex;}
|
int getPlayerIndex() const {return data.playerIndex;}
|
||||||
|
@ -508,14 +542,16 @@ public:
|
||||||
#pragma pack(push, 1)
|
#pragma pack(push, 1)
|
||||||
class NetworkMessageQuit: public NetworkMessage{
|
class NetworkMessageQuit: public NetworkMessage{
|
||||||
private:
|
private:
|
||||||
struct Data{
|
|
||||||
int8 messageType;
|
int8 messageType;
|
||||||
};
|
//struct Data{
|
||||||
|
// int8 messageType;
|
||||||
|
//};
|
||||||
void toEndian();
|
void toEndian();
|
||||||
void fromEndian();
|
void fromEndian();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Data data;
|
//Data data;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual const char * getPackedMessageFormat() const;
|
virtual const char * getPackedMessageFormat() const;
|
||||||
|
@ -526,7 +562,12 @@ protected:
|
||||||
public:
|
public:
|
||||||
NetworkMessageQuit();
|
NetworkMessageQuit();
|
||||||
|
|
||||||
virtual size_t getDataSize() const { return sizeof(Data); }
|
//virtual size_t getDataSize() const { return sizeof(Data); }
|
||||||
|
virtual size_t getDataSize() const { return 0; }
|
||||||
|
|
||||||
|
virtual NetworkMessageType getNetworkMessageType() const {
|
||||||
|
return nmtQuit;
|
||||||
|
}
|
||||||
|
|
||||||
virtual bool receive(Socket* socket);
|
virtual bool receive(Socket* socket);
|
||||||
virtual void send(Socket* socket);
|
virtual void send(Socket* socket);
|
||||||
|
@ -551,8 +592,6 @@ static const int maxFileCRCPacketCount= 25;
|
||||||
private:
|
private:
|
||||||
|
|
||||||
struct DataHeader {
|
struct DataHeader {
|
||||||
int8 messageType;
|
|
||||||
|
|
||||||
NetworkString<maxStringSize> map;
|
NetworkString<maxStringSize> map;
|
||||||
NetworkString<maxStringSize> tileset;
|
NetworkString<maxStringSize> tileset;
|
||||||
NetworkString<maxStringSize> tech;
|
NetworkString<maxStringSize> tech;
|
||||||
|
@ -575,6 +614,7 @@ private:
|
||||||
static const int32 DetailSize2 = sizeof(uint32);
|
static const int32 DetailSize2 = sizeof(uint32);
|
||||||
|
|
||||||
struct Data {
|
struct Data {
|
||||||
|
int8 messageType;
|
||||||
DataHeader header;
|
DataHeader header;
|
||||||
DataDetail detail;
|
DataDetail detail;
|
||||||
};
|
};
|
||||||
|
@ -607,6 +647,10 @@ public:
|
||||||
|
|
||||||
virtual size_t getDataSize() const { return sizeof(Data); }
|
virtual size_t getDataSize() const { return sizeof(Data); }
|
||||||
|
|
||||||
|
virtual NetworkMessageType getNetworkMessageType() const {
|
||||||
|
return nmtSynchNetworkGameData;
|
||||||
|
}
|
||||||
|
|
||||||
virtual bool receive(Socket* socket);
|
virtual bool receive(Socket* socket);
|
||||||
virtual void send(Socket* socket);
|
virtual void send(Socket* socket);
|
||||||
|
|
||||||
|
@ -644,8 +688,6 @@ static const uint32 maxFileCRCPacketCount= 25;
|
||||||
private:
|
private:
|
||||||
|
|
||||||
struct DataHeader {
|
struct DataHeader {
|
||||||
int8 messageType;
|
|
||||||
|
|
||||||
uint32 mapCRC;
|
uint32 mapCRC;
|
||||||
uint32 tilesetCRC;
|
uint32 tilesetCRC;
|
||||||
uint32 techCRC;
|
uint32 techCRC;
|
||||||
|
@ -663,6 +705,7 @@ private:
|
||||||
static const int32 DetailSize2 = sizeof(uint32);
|
static const int32 DetailSize2 = sizeof(uint32);
|
||||||
|
|
||||||
struct Data {
|
struct Data {
|
||||||
|
int8 messageType;
|
||||||
DataHeader header;
|
DataHeader header;
|
||||||
DataDetail detail;
|
DataDetail detail;
|
||||||
};
|
};
|
||||||
|
@ -686,6 +729,10 @@ public:
|
||||||
|
|
||||||
virtual size_t getDataSize() const { return sizeof(Data); }
|
virtual size_t getDataSize() const { return sizeof(Data); }
|
||||||
|
|
||||||
|
virtual NetworkMessageType getNetworkMessageType() const {
|
||||||
|
return nmtSynchNetworkGameDataStatus;
|
||||||
|
}
|
||||||
|
|
||||||
virtual bool receive(Socket* socket);
|
virtual bool receive(Socket* socket);
|
||||||
virtual void send(Socket* socket);
|
virtual void send(Socket* socket);
|
||||||
|
|
||||||
|
@ -716,8 +763,9 @@ private:
|
||||||
static const int maxStringSize= 256;
|
static const int maxStringSize= 256;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
int8 messageType;
|
||||||
struct Data{
|
struct Data{
|
||||||
int8 messageType;
|
|
||||||
|
|
||||||
uint32 totalFileCount;
|
uint32 totalFileCount;
|
||||||
uint32 fileIndex;
|
uint32 fileIndex;
|
||||||
|
@ -742,6 +790,10 @@ public:
|
||||||
|
|
||||||
virtual size_t getDataSize() const { return sizeof(Data); }
|
virtual size_t getDataSize() const { return sizeof(Data); }
|
||||||
|
|
||||||
|
virtual NetworkMessageType getNetworkMessageType() const {
|
||||||
|
return nmtSynchNetworkGameDataFileCRCCheck;
|
||||||
|
}
|
||||||
|
|
||||||
virtual bool receive(Socket* socket);
|
virtual bool receive(Socket* socket);
|
||||||
virtual void send(Socket* socket);
|
virtual void send(Socket* socket);
|
||||||
|
|
||||||
|
@ -766,8 +818,9 @@ private:
|
||||||
static const int maxStringSize= 256;
|
static const int maxStringSize= 256;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
int8 messageType;
|
||||||
struct Data{
|
struct Data{
|
||||||
int8 messageType;
|
|
||||||
|
|
||||||
NetworkString<maxStringSize> fileName;
|
NetworkString<maxStringSize> fileName;
|
||||||
};
|
};
|
||||||
|
@ -789,6 +842,10 @@ public:
|
||||||
|
|
||||||
virtual size_t getDataSize() const { return sizeof(Data); }
|
virtual size_t getDataSize() const { return sizeof(Data); }
|
||||||
|
|
||||||
|
virtual NetworkMessageType getNetworkMessageType() const {
|
||||||
|
return nmtSynchNetworkGameDataFileGet;
|
||||||
|
}
|
||||||
|
|
||||||
virtual bool receive(Socket* socket);
|
virtual bool receive(Socket* socket);
|
||||||
virtual void send(Socket* socket);
|
virtual void send(Socket* socket);
|
||||||
|
|
||||||
|
@ -821,8 +878,10 @@ private:
|
||||||
static const int maxPlayernameStringSize= 80;
|
static const int maxPlayernameStringSize= 80;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
int8 messageType;
|
||||||
struct Data {
|
struct Data {
|
||||||
int8 messageType;
|
|
||||||
NetworkString<maxStringSize> selectedFactionName; //wanted faction name
|
NetworkString<maxStringSize> selectedFactionName; //wanted faction name
|
||||||
int8 currentSlotIndex;
|
int8 currentSlotIndex;
|
||||||
int8 toSlotIndex;
|
int8 toSlotIndex;
|
||||||
|
@ -853,6 +912,10 @@ public:
|
||||||
|
|
||||||
virtual size_t getDataSize() const { return sizeof(Data); }
|
virtual size_t getDataSize() const { return sizeof(Data); }
|
||||||
|
|
||||||
|
virtual NetworkMessageType getNetworkMessageType() const {
|
||||||
|
return nmtSwitchSetupRequest;
|
||||||
|
}
|
||||||
|
|
||||||
string getSelectedFactionName() const {return data.selectedFactionName.getString();}
|
string getSelectedFactionName() const {return data.selectedFactionName.getString();}
|
||||||
int getCurrentSlotIndex() const {return data.currentSlotIndex;}
|
int getCurrentSlotIndex() const {return data.currentSlotIndex;}
|
||||||
int getToSlotIndex() const {return data.toSlotIndex;}
|
int getToSlotIndex() const {return data.toSlotIndex;}
|
||||||
|
@ -881,8 +944,10 @@ public:
|
||||||
class PlayerIndexMessage: public NetworkMessage{
|
class PlayerIndexMessage: public NetworkMessage{
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
int8 messageType;
|
||||||
struct Data {
|
struct Data {
|
||||||
int8 messageType;
|
|
||||||
int16 playerIndex;
|
int16 playerIndex;
|
||||||
};
|
};
|
||||||
void toEndian();
|
void toEndian();
|
||||||
|
@ -902,6 +967,10 @@ public:
|
||||||
|
|
||||||
virtual size_t getDataSize() const { return sizeof(Data); }
|
virtual size_t getDataSize() const { return sizeof(Data); }
|
||||||
|
|
||||||
|
virtual NetworkMessageType getNetworkMessageType() const {
|
||||||
|
return nmtPlayerIndexMessage;
|
||||||
|
}
|
||||||
|
|
||||||
int16 getPlayerIndex() const {return data.playerIndex;}
|
int16 getPlayerIndex() const {return data.playerIndex;}
|
||||||
|
|
||||||
virtual bool receive(Socket* socket);
|
virtual bool receive(Socket* socket);
|
||||||
|
@ -940,8 +1009,10 @@ enum NetworkMessageLoadingStatusType {
|
||||||
#pragma pack(push, 1)
|
#pragma pack(push, 1)
|
||||||
class NetworkMessageLoadingStatus : public NetworkMessage {
|
class NetworkMessageLoadingStatus : public NetworkMessage {
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
int8 messageType;
|
||||||
struct Data {
|
struct Data {
|
||||||
int8 messageType;
|
|
||||||
uint32 status;
|
uint32 status;
|
||||||
};
|
};
|
||||||
void toEndian();
|
void toEndian();
|
||||||
|
@ -962,6 +1033,10 @@ public:
|
||||||
|
|
||||||
virtual size_t getDataSize() const { return sizeof(Data); }
|
virtual size_t getDataSize() const { return sizeof(Data); }
|
||||||
|
|
||||||
|
virtual NetworkMessageType getNetworkMessageType() const {
|
||||||
|
return nmtLoadingStatusMessage;
|
||||||
|
}
|
||||||
|
|
||||||
uint32 getStatus() const {return data.status;}
|
uint32 getStatus() const {return data.status;}
|
||||||
|
|
||||||
virtual bool receive(Socket* socket);
|
virtual bool receive(Socket* socket);
|
||||||
|
@ -982,8 +1057,10 @@ private:
|
||||||
static const int maxTextStringSize= 500;
|
static const int maxTextStringSize= 500;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
int8 messageType;
|
||||||
struct Data{
|
struct Data{
|
||||||
int8 messageType;
|
|
||||||
|
|
||||||
int16 targetX;
|
int16 targetX;
|
||||||
int16 targetY;
|
int16 targetY;
|
||||||
|
@ -1009,6 +1086,10 @@ public:
|
||||||
|
|
||||||
virtual size_t getDataSize() const { return sizeof(Data); }
|
virtual size_t getDataSize() const { return sizeof(Data); }
|
||||||
|
|
||||||
|
virtual NetworkMessageType getNetworkMessageType() const {
|
||||||
|
return nmtMarkCell;
|
||||||
|
}
|
||||||
|
|
||||||
string getText() const { return data.text.getString(); }
|
string getText() const { return data.text.getString(); }
|
||||||
Vec2i getTarget() const { return Vec2i(data.targetX,data.targetY); }
|
Vec2i getTarget() const { return Vec2i(data.targetX,data.targetY); }
|
||||||
int getFactionIndex() const { return data.factionIndex; }
|
int getFactionIndex() const { return data.factionIndex; }
|
||||||
|
@ -1030,8 +1111,10 @@ public:
|
||||||
class NetworkMessageUnMarkCell: public NetworkMessage {
|
class NetworkMessageUnMarkCell: public NetworkMessage {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
int8 messageType;
|
||||||
struct Data {
|
struct Data {
|
||||||
int8 messageType;
|
|
||||||
|
|
||||||
int16 targetX;
|
int16 targetX;
|
||||||
int16 targetY;
|
int16 targetY;
|
||||||
|
@ -1055,6 +1138,10 @@ public:
|
||||||
|
|
||||||
virtual size_t getDataSize() const { return sizeof(Data); }
|
virtual size_t getDataSize() const { return sizeof(Data); }
|
||||||
|
|
||||||
|
virtual NetworkMessageType getNetworkMessageType() const {
|
||||||
|
return nmtUnMarkCell;
|
||||||
|
}
|
||||||
|
|
||||||
Vec2i getTarget() const { return Vec2i(data.targetX,data.targetY); }
|
Vec2i getTarget() const { return Vec2i(data.targetX,data.targetY); }
|
||||||
int getFactionIndex() const { return data.factionIndex; }
|
int getFactionIndex() const { return data.factionIndex; }
|
||||||
|
|
||||||
|
@ -1077,8 +1164,9 @@ private:
|
||||||
static const int maxTextStringSize= 500;
|
static const int maxTextStringSize= 500;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
int8 messageType;
|
||||||
struct Data{
|
struct Data{
|
||||||
int8 messageType;
|
|
||||||
|
|
||||||
int16 targetX;
|
int16 targetX;
|
||||||
int16 targetY;
|
int16 targetY;
|
||||||
|
@ -1102,6 +1190,10 @@ public:
|
||||||
|
|
||||||
virtual size_t getDataSize() const { return sizeof(Data); }
|
virtual size_t getDataSize() const { return sizeof(Data); }
|
||||||
|
|
||||||
|
virtual NetworkMessageType getNetworkMessageType() const {
|
||||||
|
return nmtHighlightCell;
|
||||||
|
}
|
||||||
|
|
||||||
Vec2i getTarget() const { return Vec2i(data.targetX,data.targetY); }
|
Vec2i getTarget() const { return Vec2i(data.targetX,data.targetY); }
|
||||||
int getFactionIndex() const { return data.factionIndex; }
|
int getFactionIndex() const { return data.factionIndex; }
|
||||||
|
|
||||||
|
|
|
@ -1406,18 +1406,22 @@ int Socket::receive(void *data, int dataSize, bool tryReceiveUntilDataSizeMet) {
|
||||||
else if(bytesReceived < 0 && lastSocketError == PLATFORM_SOCKET_TRY_AGAIN) {
|
else if(bytesReceived < 0 && lastSocketError == PLATFORM_SOCKET_TRY_AGAIN) {
|
||||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] #1 EAGAIN during receive, trying again...\n",__FILE__,__FUNCTION__,__LINE__);
|
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] #1 EAGAIN during receive, trying again...\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
||||||
|
Chrono chronoElapsed(true);
|
||||||
const int MAX_RECV_WAIT_SECONDS = 3;
|
const int MAX_RECV_WAIT_SECONDS = 3;
|
||||||
time_t tStartTimer = time(NULL);
|
time_t tStartTimer = time(NULL);
|
||||||
while((bytesReceived < 0 && lastSocketError == PLATFORM_SOCKET_TRY_AGAIN) &&
|
while((bytesReceived < 0 && lastSocketError == PLATFORM_SOCKET_TRY_AGAIN) &&
|
||||||
(difftime((long int)time(NULL),tStartTimer) <= MAX_RECV_WAIT_SECONDS)) {
|
(difftime((long int)time(NULL),tStartTimer) <= MAX_RECV_WAIT_SECONDS)) {
|
||||||
if(isConnected() == false) {
|
if(isConnected() == false) {
|
||||||
int iErr = getLastSocketError();
|
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"[%s::%s Line: %d] Socket is NOT connected!\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
||||||
|
int iErr = getLastSocketError();
|
||||||
disconnectSocket();
|
disconnectSocket();
|
||||||
|
|
||||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"[%s::%s Line: %d] DISCONNECTED SOCKET error while receiving socket data, bytesSent = %d, error = %s\n",__FILE__,__FUNCTION__,__LINE__,bytesReceived,getLastSocketErrorFormattedText(&iErr).c_str());
|
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"[%s::%s Line: %d] DISCONNECTED SOCKET error while receiving socket data, bytesSent = %d, error = %s\n",__FILE__,__FUNCTION__,__LINE__,bytesReceived,getLastSocketErrorFormattedText(&iErr).c_str());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if(Socket::isReadable(true) == true) {
|
//else if(Socket::isReadable(true) == true) {
|
||||||
|
else {
|
||||||
// MutexSafeWrapper safeMutexSocketDestructorFlag(&inSocketDestructorSynchAccessor,CODE_AT_LINE);
|
// MutexSafeWrapper safeMutexSocketDestructorFlag(&inSocketDestructorSynchAccessor,CODE_AT_LINE);
|
||||||
// if(this->inSocketDestructor == true) {
|
// if(this->inSocketDestructor == true) {
|
||||||
// SystemFlags::OutputDebug(SystemFlags::debugError,"In [%s::%s Line: %d] this->inSocketDestructor == true\n",__FILE__,__FUNCTION__,__LINE__);
|
// SystemFlags::OutputDebug(SystemFlags::debugError,"In [%s::%s Line: %d] this->inSocketDestructor == true\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
@ -1426,17 +1430,37 @@ int Socket::receive(void *data, int dataSize, bool tryReceiveUntilDataSizeMet) {
|
||||||
// inSocketDestructorSynchAccessor->setOwnerId(CODE_AT_LINE);
|
// inSocketDestructorSynchAccessor->setOwnerId(CODE_AT_LINE);
|
||||||
// safeMutexSocketDestructorFlag.ReleaseLock();
|
// safeMutexSocketDestructorFlag.ReleaseLock();
|
||||||
|
|
||||||
MutexSafeWrapper safeMutex(dataSynchAccessorRead,CODE_AT_LINE);
|
//if(chronoElapsed.getMillis() % 2 == 0) {
|
||||||
bytesReceived = recv(sock, reinterpret_cast<char*>(data), dataSize, 0);
|
// sleep(0);
|
||||||
lastSocketError = getLastSocketError();
|
//}
|
||||||
safeMutex.ReleaseLock();
|
if(Socket::isReadable(true) == true) {
|
||||||
|
MutexSafeWrapper safeMutex(dataSynchAccessorRead,CODE_AT_LINE);
|
||||||
|
|
||||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] #2 EAGAIN during receive, trying again returned: %d\n",__FILE__,__FUNCTION__,__LINE__,bytesReceived);
|
//SafeSocketBlockToggleWrapper safeBlock(this, true);
|
||||||
|
errno = 0;
|
||||||
|
bytesReceived = recv(sock, reinterpret_cast<char*>(data), dataSize, 0);
|
||||||
|
lastSocketError = getLastSocketError();
|
||||||
|
//safeBlock.Restore();
|
||||||
|
safeMutex.ReleaseLock();
|
||||||
|
|
||||||
|
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] #2 EAGAIN during receive, trying again returned: %d, lastSocketError = %d, dataSize = %d\n",__FILE__,__FUNCTION__,__LINE__,bytesReceived,lastSocketError,(int)dataSize);
|
||||||
|
printf("In [%s::%s Line: %d] #2 EAGAIN during receive, trying again returned: %d, lastSocketError = %d, dataSize = %d\n",__FILE__,__FUNCTION__,__LINE__,bytesReceived,lastSocketError,(int)dataSize);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(chronoElapsed.getMillis() % 3 == 0) {
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
sleep(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(bytesReceived <= 0) {
|
if(bytesReceived <= 0) {
|
||||||
|
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] bytesReceived = %d\n",__FILE__,__FUNCTION__,__LINE__,bytesReceived);
|
||||||
|
|
||||||
int iErr = getLastSocketError();
|
int iErr = getLastSocketError();
|
||||||
disconnectSocket();
|
disconnectSocket();
|
||||||
|
|
||||||
|
@ -1524,14 +1548,14 @@ int Socket::peek(void *data, int dataSize,bool mustGetData,int *pLastSocketError
|
||||||
//if(chrono.getMillis() > 1) printf("In [%s::%s Line: %d] action running for msecs: %lld\n",__FILE__,__FUNCTION__,__LINE__,(long long int)chrono.getMillis());
|
//if(chrono.getMillis() > 1) printf("In [%s::%s Line: %d] action running for msecs: %lld\n",__FILE__,__FUNCTION__,__LINE__,(long long int)chrono.getMillis());
|
||||||
if(isSocketValid() == true) {
|
if(isSocketValid() == true) {
|
||||||
// Chrono recvTimer(true);
|
// Chrono recvTimer(true);
|
||||||
//SafeSocketBlockToggleWrapper safeUnblock(this, false);
|
SafeSocketBlockToggleWrapper safeUnblock(this, false);
|
||||||
errno = 0;
|
errno = 0;
|
||||||
err = recv(sock, reinterpret_cast<char*>(data), dataSize, MSG_PEEK);
|
err = recv(sock, reinterpret_cast<char*>(data), dataSize, MSG_PEEK);
|
||||||
lastSocketError = getLastSocketError();
|
lastSocketError = getLastSocketError();
|
||||||
if(pLastSocketError != NULL) {
|
if(pLastSocketError != NULL) {
|
||||||
*pLastSocketError = lastSocketError;
|
*pLastSocketError = lastSocketError;
|
||||||
}
|
}
|
||||||
//safeUnblock.Restore();
|
safeUnblock.Restore();
|
||||||
|
|
||||||
// if(recvTimer.getMillis() > 1000 || (err <= 0 && lastSocketError != 0 && lastSocketError != PLATFORM_SOCKET_TRY_AGAIN)) {
|
// if(recvTimer.getMillis() > 1000 || (err <= 0 && lastSocketError != 0 && lastSocketError != PLATFORM_SOCKET_TRY_AGAIN)) {
|
||||||
// printf("#1 PEEK err = %d lastSocketError = %d ms: %lld\n",err,lastSocketError,(long long int)recvTimer.getMillis());
|
// printf("#1 PEEK err = %d lastSocketError = %d ms: %lld\n",err,lastSocketError,(long long int)recvTimer.getMillis());
|
||||||
|
@ -1588,14 +1612,14 @@ int Socket::peek(void *data, int dataSize,bool mustGetData,int *pLastSocketError
|
||||||
MutexSafeWrapper safeMutex(dataSynchAccessorRead,CODE_AT_LINE);
|
MutexSafeWrapper safeMutex(dataSynchAccessorRead,CODE_AT_LINE);
|
||||||
|
|
||||||
// Chrono recvTimer(true);
|
// Chrono recvTimer(true);
|
||||||
//SafeSocketBlockToggleWrapper safeUnblock(this, false);
|
SafeSocketBlockToggleWrapper safeUnblock(this, false);
|
||||||
errno = 0;
|
errno = 0;
|
||||||
err = recv(sock, reinterpret_cast<char*>(data), dataSize, MSG_PEEK);
|
err = recv(sock, reinterpret_cast<char*>(data), dataSize, MSG_PEEK);
|
||||||
lastSocketError = getLastSocketError();
|
lastSocketError = getLastSocketError();
|
||||||
if(pLastSocketError != NULL) {
|
if(pLastSocketError != NULL) {
|
||||||
*pLastSocketError = lastSocketError;
|
*pLastSocketError = lastSocketError;
|
||||||
}
|
}
|
||||||
//safeUnblock.Restore();
|
safeUnblock.Restore();
|
||||||
|
|
||||||
// if(recvTimer.getMillis() > 1000 || (err <= 0 && lastSocketError != 0 && lastSocketError != PLATFORM_SOCKET_TRY_AGAIN)) {
|
// if(recvTimer.getMillis() > 1000 || (err <= 0 && lastSocketError != 0 && lastSocketError != PLATFORM_SOCKET_TRY_AGAIN)) {
|
||||||
// printf("#2 PEEK err = %d lastSocketError = %d ms: %lld\n",err,lastSocketError,(long long int)recvTimer.getMillis());
|
// printf("#2 PEEK err = %d lastSocketError = %d ms: %lld\n",err,lastSocketError,(long long int)recvTimer.getMillis());
|
||||||
|
|
Loading…
Reference in New Issue