diff --git a/omapip/connection.c b/omapip/connection.c index 02828632..0f7dd30e 100644 --- a/omapip/connection.c +++ b/omapip/connection.c @@ -30,6 +30,7 @@ isc_result_t omapi_connect (omapi_object_t *c, int hix; isc_result_t status; omapi_connection_object_t *obj; + int flag; obj = (omapi_connection_object_t *)malloc (sizeof *obj); if (!obj) @@ -89,6 +90,15 @@ isc_result_t omapi_connect (omapi_object_t *c, return ISC_R_NORESOURCES; return ISC_R_UNEXPECTED; } + + /* Set the SO_REUSEADDR flag (this should not fail). */ + flag = 1; + if (setsockopt (obj -> socket, SOL_SOCKET, SO_REUSEADDR, + (char *)&flag, sizeof flag) < 0) { + omapi_object_dereference ((omapi_object_t **)&obj, + "omapi_connect"); + return ISC_R_UNEXPECTED; + } /* Try to connect to the one IP address we were given, or any of the IP addresses listed in the host's A RR. */ @@ -225,6 +235,7 @@ int omapi_connection_writefd (omapi_object_t *h) omapi_connection_object_t *c; if (h -> type != omapi_type_connection) return -1; + c = (omapi_connection_object_t *)h; if (c -> out_bytes) return c -> socket; else