Delay shutting down WinSock until exit() time
+static int winsock_inited = 0;
+static int winsock_uninited = 0;
+
/* Initialising WinSock... */
StgInt
initWinSock ()
/* Initialising WinSock... */
StgInt
initWinSock ()
WSADATA wsaData;
int err;
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 ) {
HIBYTE( wsaData.wVersion ) != 1 ) {
- WSACleanup();
- return (-1);
+ WSACleanup();
+ return (-1);
+ }
+ winsock_inited = 1;
+static void
+shutdownHandler()
+{
+ WSACleanup();
+}
+
+ if (!winsock_uninited) {
+ atexit(shutdownHandler);
+ winsock_uninited = 1;
+ }