From 7c25feb51bdbc9563cc65ff4829f761ef7231483 Mon Sep 17 00:00:00 2001 From: Martin Sustrik Date: Wed, 3 Feb 2010 13:06:34 +0100 Subject: ZMQII-55: At most one PGM/UDP transport can be opened --- src/pgm_socket.cpp | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) (limited to 'src/pgm_socket.cpp') diff --git a/src/pgm_socket.cpp b/src/pgm_socket.cpp index 4d713e3..8160ca6 100644 --- a/src/pgm_socket.cpp +++ b/src/pgm_socket.cpp @@ -78,33 +78,35 @@ int zmq::pgm_socket_t::init (bool udp_encapsulation_, const char *network_) nbytes_processed = 0; pgm_msgv_processed = 0; + int rc; GError *pgm_error = NULL; - // Init PGM transport. + // Init PGM transport if not already done. // Ensure threading enabled, ensure timer enabled and find PGM protocol id. // // Note that if you want to use gettimeofday and sleep for openPGM timing, // set environment variables PGM_TIMER to "GTOD" // and PGM_SLEEP to "USLEEP". - int rc = pgm_init (&pgm_error); - if (rc != TRUE) { + if (!pgm_supported ()) { + rc = pgm_init (&pgm_error); + if (rc != TRUE) { + if (pgm_error->domain == PGM_IF_ERROR && ( + pgm_error->code == PGM_IF_ERROR_INVAL || + pgm_error->code == PGM_IF_ERROR_XDEV || + pgm_error->code == PGM_IF_ERROR_NODEV || + pgm_error->code == PGM_IF_ERROR_NOTUNIQ || + pgm_error->code == PGM_IF_ERROR_ADDRFAMILY || + pgm_error->code == PGM_IF_ERROR_FAMILY || + pgm_error->code == PGM_IF_ERROR_NODATA || + pgm_error->code == PGM_IF_ERROR_NONAME || + pgm_error->code == PGM_IF_ERROR_SERVICE)) { + errno = EINVAL; + g_error_free (pgm_error); + return -1; + } - if (pgm_error->domain == PGM_IF_ERROR && ( - pgm_error->code == PGM_IF_ERROR_INVAL || - pgm_error->code == PGM_IF_ERROR_XDEV || - pgm_error->code == PGM_IF_ERROR_NODEV || - pgm_error->code == PGM_IF_ERROR_NOTUNIQ || - pgm_error->code == PGM_IF_ERROR_ADDRFAMILY || - pgm_error->code == PGM_IF_ERROR_FAMILY || - pgm_error->code == PGM_IF_ERROR_NODATA || - pgm_error->code == PGM_IF_ERROR_NONAME || - pgm_error->code == PGM_IF_ERROR_SERVICE)) { - errno = EINVAL; - g_error_free (pgm_error); - return -1; + zmq_assert (false); } - - zmq_assert (false); } // PGM transport GSI. -- cgit v1.2.3