version 0.1.2
[fms.git] / src / nntp / nntplistener.cpp
index 4d1c37d..01b008d 100644 (file)
@@ -9,7 +9,8 @@
        #include <winsock2.h>\r
        #include <ws2tcpip.h>\r
 #else\r
-\r
+       #include <netinet/in.h>  // gcc - IPPROTO_ consts\r
+       #include <netdb.h>       // gcc - addrinfo\r
 #endif\r
 \r
 #ifdef XMEM\r
@@ -29,7 +30,7 @@ NNTPListener::~NNTPListener()
 void NNTPListener::run()\r
 {\r
        int rval;\r
-       struct fd_set readfs;\r
+       fd_set readfs;\r
        struct timeval tv;\r
        std::vector<SOCKET>::iterator listeni;\r
        SOCKET highsocket;\r
@@ -81,16 +82,31 @@ void NNTPListener::run()
        // see if any threads are still running - just calling interrupt without check would cause assert in debug mode\r
        if(m_connections.wait(1)==false)\r
        {\r
+               LogFile::instance()->WriteLog(LogFile::LOGLEVEL_DEBUG,"NNTPListener::run interrupting connection threads and waiting 60 seconds for exit.");\r
                try\r
                {\r
                        m_connections.interrupt();\r
                }\r
                catch(...)\r
                {\r
+                       LogFile::instance()->WriteLog(LogFile::LOGLEVEL_DEBUG,"NNTPListener::run caught unhandled exception.");\r
+               }\r
+               if(m_connections.wait(60)==false)\r
+               {\r
+                       LogFile::instance()->WriteLog(LogFile::LOGLEVEL_DEBUG,"NNTPListener::run connection threads did not exit after 60 seconds.");\r
                }\r
-               m_connections.wait();\r
        }\r
 \r
+       for(listeni=m_listensockets.begin(); listeni!=m_listensockets.end(); listeni++)\r
+       {\r
+               #ifdef _WIN32\r
+               closesocket((*listeni));\r
+               #else\r
+               close((*listeni));\r
+               #endif\r
+       }\r
+       m_listensockets.clear();\r
+\r
 }\r
 \r
 void NNTPListener::StartListen()\r