diff --git a/common/EQStreamFactory.cpp b/common/EQStreamFactory.cpp index 0eb6fe25f..2109c2586 100644 --- a/common/EQStreamFactory.cpp +++ b/common/EQStreamFactory.cpp @@ -64,13 +64,17 @@ EQStreamFactory::EQStreamFactory(EQStreamType type, int port, uint32 timeout) void EQStreamFactory::Close() { Stop(); + CloseWithoutStop(); +} -#ifdef _WINDOWS - closesocket(sock); -#else - close(sock); -#endif - sock=-1; +void EQStreamFactory::CloseWithoutStop() +{ + #ifdef _WINDOWS + closesocket(sock); + #else + close(sock); + #endif + sock=-1; } bool EQStreamFactory::Open() @@ -93,8 +97,7 @@ struct sockaddr_in address; } if (bind(sock, (struct sockaddr *) &address, sizeof(address)) < 0) { - close(sock); - sock=-1; + CloseWithoutStop(); return false; } #ifdef _WINDOWS diff --git a/common/EQStreamFactory.h b/common/EQStreamFactory.h index dd0b7f1b8..cc2cd6f82 100644 --- a/common/EQStreamFactory.h +++ b/common/EQStreamFactory.h @@ -35,7 +35,7 @@ class EQStreamFactory : private Timeoutable { Timer *DecayTimer; uint32 stream_timeout; - + void CloseWithoutStop(); public: EQStreamFactory(EQStreamType type, uint32 timeout = 135000) : Timeoutable(5000), stream_timeout(timeout) { ReaderRunning=false; WriterRunning=false; StreamType=type; sock=-1; } EQStreamFactory(EQStreamType type, int port, uint32 timeout = 135000); @@ -47,6 +47,7 @@ class EQStreamFactory : private Timeoutable { bool Open(unsigned long port) { Port=port; return Open(); } bool IsOpen() { return sock!=-1; } void Close(); + void ReaderLoop(); void WriterLoop(); void Stop() { StopReader(); StopWriter(); }