+ sockets reuse (*nix only)
authorAlex Kirhenshtein <alk@netxms.org>
Tue, 18 Jan 2005 15:51:43 +0000 (15:51 +0000)
committerAlex Kirhenshtein <alk@netxms.org>
Tue, 18 Jan 2005 15:51:43 +0000 (15:51 +0000)
src/agent/core/comm.cpp
src/agent/core/nxagentd.h
src/server/core/admin.cpp
src/server/core/client.cpp
src/server/core/snmptrap.cpp
src/server/include/nms_core.h

index 5c5dfb1..742572e 100644 (file)
@@ -122,6 +122,8 @@ THREAD_RESULT THREAD_CALL ListenerThread(void *)
       exit(1);
    }
 
       exit(1);
    }
 
+       SetSocketReuseFlag(hSocket);
+
    // Fill in local address structure
    memset(&servAddr, 0, sizeof(struct sockaddr_in));
    servAddr.sin_family = AF_INET;
    // Fill in local address structure
    memset(&servAddr, 0, sizeof(struct sockaddr_in));
    servAddr.sin_family = AF_INET;
index 4d4aff7..9b83298 100644 (file)
 #include <nxclapi.h>
 
 
 #include <nxclapi.h>
 
 
+#ifdef _WIN32
+# define SetSocketReuseFlag(sd)
+#else
+# define SetSocketReuseFlag(sd) { \
+       int nVal = 1; \
+       setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, (const void *)&nVal,  \
+                       (socklen_t)sizeof(nVal)); \
+}
+#endif
+
+
 //
 // Version
 //
 //
 // Version
 //
index 44916a5..14e6eaa 100644 (file)
@@ -1,3 +1,5 @@
+/* $Id: admin.cpp,v 1.6 2005-01-18 15:51:42 alk Exp $ */
+
 /* 
 ** NetXMS - Network Management System
 ** Copyright (C) 2003, 2004 Victor Kirhenshtein
 /* 
 ** NetXMS - Network Management System
 ** Copyright (C) 2003, 2004 Victor Kirhenshtein
@@ -193,6 +195,8 @@ THREAD_RESULT THREAD_CALL LocalAdminListener(void *pArg)
       return THREAD_OK;
    }
 
       return THREAD_OK;
    }
 
+       SetSocketReuseFlag(sock);
+
    // Fill in local address structure
    memset(&servAddr, 0, sizeof(struct sockaddr_in));
    servAddr.sin_family = AF_INET;
    // Fill in local address structure
    memset(&servAddr, 0, sizeof(struct sockaddr_in));
    servAddr.sin_family = AF_INET;
@@ -245,3 +249,10 @@ THREAD_RESULT THREAD_CALL LocalAdminListener(void *pArg)
    closesocket(sock);
    return THREAD_OK;
 }
    closesocket(sock);
    return THREAD_OK;
 }
+
+///////////////////////////////////////////////////////////////////////////////
+/*
+
+$Log: not supported by cvs2svn $
+
+*/
index e122737..ac013c3 100644 (file)
@@ -97,6 +97,8 @@ THREAD_RESULT THREAD_CALL ClientListener(void *)
       return THREAD_OK;
    }
 
       return THREAD_OK;
    }
 
+       SetSocketReuseFlag(sock);
+
    // Create session list access mutex
    m_hSessionListAccess = MutexCreate();
 
    // Create session list access mutex
    m_hSessionListAccess = MutexCreate();
 
index 10695d0..99d81e4 100644 (file)
@@ -270,6 +270,8 @@ THREAD_RESULT THREAD_CALL SNMPTrapReceiver(void *pArg)
       return THREAD_OK;
    }
 
       return THREAD_OK;
    }
 
+       SetSocketReuseFlag(hSocket);
+
    // Fill in local address structure
    memset(&addr, 0, sizeof(struct sockaddr_in));
    addr.sin_family = AF_INET;
    // Fill in local address structure
    memset(&addr, 0, sizeof(struct sockaddr_in));
    addr.sin_family = AF_INET;
index 06a1624..ba10562 100644 (file)
@@ -455,11 +455,19 @@ DWORD DeleteTrap(DWORD dwId);
 #ifdef _WIN32
 
 char NXCORE_EXPORTABLE *GetSystemErrorText(DWORD error);
 #ifdef _WIN32
 
 char NXCORE_EXPORTABLE *GetSystemErrorText(DWORD error);
+#define SetSocketReuseFlag(sd)
+}
 
 #else
 
 void NXCORE_EXPORTABLE OnSignal(int iSignal);
 
 
 #else
 
 void NXCORE_EXPORTABLE OnSignal(int iSignal);
 
+#define SetSocketReuseFlag(sd) { \
+       int nVal = 1; \
+       setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, (const void *)&nVal,  \
+                       (socklen_t)sizeof(nVal)); \
+}
+
 #endif   /* _WIN32 */
 
 void DbgTestMutex(MUTEX hMutex, TCHAR *szName);
 #endif   /* _WIN32 */
 
 void DbgTestMutex(MUTEX hMutex, TCHAR *szName);