mirror of
https://github.com/zeromq/libzmq.git
synced 2024-12-13 18:55:10 +01:00
Fixed win32 issue with WSAStartup
- ctx constructor was calling mailbox_t constructor implicitly - moved WSAStartup and WSACleanup to be outside constructor/destructor Signed-off-by: Pieter Hintjens <ph@imatix.com>
This commit is contained in:
parent
e94790006e
commit
14a0e147b2
17
src/ctx.cpp
17
src/ctx.cpp
@ -39,17 +39,6 @@ zmq::ctx_t::ctx_t (uint32_t io_threads_) :
|
||||
{
|
||||
int rc;
|
||||
|
||||
#ifdef ZMQ_HAVE_WINDOWS
|
||||
// Intialise Windows sockets. Note that WSAStartup can be called multiple
|
||||
// times given that WSACleanup will be called for each WSAStartup.
|
||||
WORD version_requested = MAKEWORD (2, 2);
|
||||
WSADATA wsa_data;
|
||||
rc = WSAStartup (version_requested, &wsa_data);
|
||||
zmq_assert (rc == 0);
|
||||
zmq_assert (LOBYTE (wsa_data.wVersion) == 2 &&
|
||||
HIBYTE (wsa_data.wVersion) == 2);
|
||||
#endif
|
||||
|
||||
// Initialise the array of mailboxes. Additional three slots are for
|
||||
// internal log socket and the zmq_term thread the reaper thread.
|
||||
slot_count = max_sockets + io_threads_ + 3;
|
||||
@ -109,12 +98,6 @@ zmq::ctx_t::~ctx_t ()
|
||||
// needed as mailboxes themselves were deallocated with their
|
||||
// corresponding io_thread/socket objects.
|
||||
free (slots);
|
||||
|
||||
#ifdef ZMQ_HAVE_WINDOWS
|
||||
// On Windows, uninitialise socket layer.
|
||||
int rc = WSACleanup ();
|
||||
wsa_assert (rc != SOCKET_ERROR);
|
||||
#endif
|
||||
}
|
||||
|
||||
int zmq::ctx_t::terminate ()
|
||||
|
19
src/zmq.cpp
19
src/zmq.cpp
@ -234,6 +234,19 @@ void *zmq_init (int io_threads_)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef ZMQ_HAVE_WINDOWS
|
||||
// Intialise Windows sockets. Note that WSAStartup can be called multiple
|
||||
// times given that WSACleanup will be called for each WSAStartup.
|
||||
// We do this before the ctx constructor since its embedded mailbox_t
|
||||
// object needs Winsock to be up and running.
|
||||
WORD version_requested = MAKEWORD (2, 2);
|
||||
WSADATA wsa_data;
|
||||
int rc = WSAStartup (version_requested, &wsa_data);
|
||||
zmq_assert (rc == 0);
|
||||
zmq_assert (LOBYTE (wsa_data.wVersion) == 2 &&
|
||||
HIBYTE (wsa_data.wVersion) == 2);
|
||||
#endif
|
||||
|
||||
// Create 0MQ context.
|
||||
zmq::ctx_t *ctx = new (std::nothrow) zmq::ctx_t ((uint32_t) io_threads_);
|
||||
zmq_assert (ctx);
|
||||
@ -250,6 +263,12 @@ int zmq_term (void *ctx_)
|
||||
int rc = ((zmq::ctx_t*) ctx_)->terminate ();
|
||||
int en = errno;
|
||||
|
||||
#ifdef ZMQ_HAVE_WINDOWS
|
||||
// On Windows, uninitialise socket layer.
|
||||
rc = WSACleanup ();
|
||||
wsa_assert (rc != SOCKET_ERROR);
|
||||
#endif
|
||||
|
||||
#if defined ZMQ_HAVE_OPENPGM
|
||||
// Shut down the OpenPGM library.
|
||||
if (pgm_shutdown () != TRUE)
|
||||
|
Loading…
Reference in New Issue
Block a user