summaryrefslogtreecommitdiff
path: root/win32
diff options
context:
space:
mode:
authorGurusamy Sarathy <gsar@cpan.org>2000-07-05 22:08:19 +0000
committerGurusamy Sarathy <gsar@cpan.org>2000-07-05 22:08:19 +0000
commitb73db59cdbd5ebb7813123c6082df2b8933fe5e0 (patch)
treecc7ea55f45142268ff662f1d0b1c8b7b65ad85a3 /win32
parente4e99f0d17cfc47fc39e498c985a947bab69a660 (diff)
downloadperl-b73db59cdbd5ebb7813123c6082df2b8933fe5e0.tar.gz
winsock cleanup never done on Windows (leads to handle leaks)
p4raw-id: //depot/perl@6317
Diffstat (limited to 'win32')
-rw-r--r--win32/perllib.c5
-rw-r--r--win32/win32sck.c13
2 files changed, 12 insertions, 6 deletions
diff --git a/win32/perllib.c b/win32/perllib.c
index 857aada247..fae334608f 100644
--- a/win32/perllib.c
+++ b/win32/perllib.c
@@ -338,6 +338,10 @@ RunPerl(int argc, char **argv, char **env)
EXTERN_C void
set_w32_module_name(void);
+EXTERN_C void
+EndSockets(void);
+
+
#ifdef __MINGW32__
EXTERN_C /* GCC in C++ mode mangles the name, otherwise */
#endif
@@ -367,6 +371,7 @@ DllMain(HANDLE hModule, /* DLL module handle */
* process termination or call to FreeLibrary.
*/
case DLL_PROCESS_DETACH:
+ EndSockets();
break;
/* The attached process creates a new thread. */
diff --git a/win32/win32sck.c b/win32/win32sck.c
index 93d501edef..cc96688919 100644
--- a/win32/win32sck.c
+++ b/win32/win32sck.c
@@ -56,12 +56,6 @@
} STMT_END
#endif
-#define EndSockets() \
- STMT_START { \
- if (wsock_started) \
- WSACleanup(); \
- } STMT_END
-
#define SOCKET_TEST(x, y) \
STMT_START { \
StartSockets(); \
@@ -77,6 +71,13 @@ static struct servent* win32_savecopyservent(struct servent*d,
static int wsock_started = 0;
+EXTERN_C void
+EndSockets(void)
+{
+ if (wsock_started)
+ WSACleanup();
+}
+
void
start_sockets(void)
{