From: sof Date: Thu, 7 Oct 1999 13:09:48 +0000 (+0000) Subject: [project @ 1999-10-07 13:09:48 by sof] X-Git-Tag: Approximately_9120_patches~5724 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=c565f32f85007fff2cad54115a35464a9de84005;p=ghc-hetmet.git [project @ 1999-10-07 13:09:48 by sof] Delay shutting down WinSock until exit() time --- diff --git a/ghc/lib/misc/cbits/initWinSock.c b/ghc/lib/misc/cbits/initWinSock.c index f928f3e..672a098 100644 --- a/ghc/lib/misc/cbits/initWinSock.c +++ b/ghc/lib/misc/cbits/initWinSock.c @@ -11,6 +11,9 @@ #ifdef USE_WINSOCK +static int winsock_inited = 0; +static int winsock_uninited = 0; + /* Initialising WinSock... */ StgInt initWinSock () @@ -19,26 +22,38 @@ initWinSock () WSADATA wsaData; int err; - wVersionRequested = MAKEWORD( 1, 1 ); + if (!winsock_inited) { + wVersionRequested = MAKEWORD( 1, 1 ); - err = WSAStartup ( wVersionRequested, &wsaData ); + err = WSAStartup ( wVersionRequested, &wsaData ); - if ( err != 0 ) { - return err; - } + if ( err != 0 ) { + return err; + } - if ( LOBYTE( wsaData.wVersion ) != 1 || + if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ) { - WSACleanup(); - return (-1); + WSACleanup(); + return (-1); + } + winsock_inited = 1; } return 0; } +static void +shutdownHandler() +{ + WSACleanup(); +} + void shutdownWinSock() { - WSACleanup(); + if (!winsock_uninited) { + atexit(shutdownHandler); + winsock_uninited = 1; + } } #endif