From 8284e59867d24dbb341da5c65b2458f48e211c20 Mon Sep 17 00:00:00 2001 From: Jens Georg Date: Thu, 30 Jun 2011 21:51:11 +0200 Subject: [PATCH] Fix functionality on OpenBSD --- libgssdp/gssdp-socket-functions.c | 24 ++++++++++++++++++++---- libgssdp/gssdp-socket-functions.h | 2 -- libgssdp/gssdp-socket-source.c | 9 ++++----- 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/libgssdp/gssdp-socket-functions.c b/libgssdp/gssdp-socket-functions.c index 37af2ca..6f10a9f 100644 --- a/libgssdp/gssdp-socket-functions.c +++ b/libgssdp/gssdp-socket-functions.c @@ -90,8 +90,13 @@ gssdp_socket_option_set (GSocket *socket, gboolean gssdp_socket_enable_loop (GSocket *socket, - gboolean enable, + gboolean _enable, GError **error) { +#if defined(__OpenBSD__) + guint8 enable = (guint8) _enable; +#else + gboolean enable = _enable; +#endif return gssdp_socket_option_set (socket, IPPROTO_IP, IP_MULTICAST_LOOP, @@ -102,8 +107,13 @@ gssdp_socket_enable_loop (GSocket *socket, gboolean gssdp_socket_set_ttl (GSocket *socket, - int ttl, + int _ttl, GError **error) { +#if defined(__OpenBSD__) + guint8 ttl = (guint8) _ttl; +#else + int ttl = _ttl; +#endif return gssdp_socket_option_set (socket, IPPROTO_IP, IP_MULTICAST_TTL, @@ -143,19 +153,25 @@ gssdp_socket_mcast_interface_set (GSocket *socket, error); } -#ifdef G_OS_WIN32 gboolean gssdp_socket_reuse_address (GSocket *socket, gboolean enable, GError **error) { +#if defined(G_OS_WIN32) || defined(__OpenBSD__) return gssdp_socket_option_set (socket, SOL_SOCKET, +#if defined(__OpenBSD__) + SO_REUSEPORT, +#else SO_REUSEADDR, +#endif + (char *) &enable, sizeof (enable), error); -} #endif + return TRUE; +} /* diff --git a/libgssdp/gssdp-socket-functions.h b/libgssdp/gssdp-socket-functions.h index 99784d2..b9b5ca5 100644 --- a/libgssdp/gssdp-socket-functions.h +++ b/libgssdp/gssdp-socket-functions.h @@ -45,10 +45,8 @@ gssdp_socket_mcast_group_join (GSocket *socket, GInetAddress *group, GInetAddress *iface, GError **error); -#ifdef G_OS_WIN32 G_GNUC_INTERNAL gboolean gssdp_socket_reuse_address (GSocket *socket, gboolean enable, GError **error); #endif -#endif diff --git a/libgssdp/gssdp-socket-source.c b/libgssdp/gssdp-socket-source.c index 14f56d3..720061e 100644 --- a/libgssdp/gssdp-socket-source.c +++ b/libgssdp/gssdp-socket-source.c @@ -249,11 +249,10 @@ gssdp_socket_source_do_init (GInitable *initable, port); } -#ifdef G_OS_WIN32 - /* normally g_socket_bind does this, but it is disabled on + /* Normally g_socket_bind does this, but it is disabled on * windows since SO_REUSEADDR has different semantics - * there. Nevertheless, there's no way without for - * multicast sockets + * there, also we nees SO_REUSEPORT on OpenBSD. This is a nop + * everywhere else. */ if (!gssdp_socket_reuse_address (self->priv->socket, TRUE, @@ -265,7 +264,7 @@ gssdp_socket_source_do_init (GInitable *initable, goto error; } -#endif + /* Bind to requested port and address */ if (!g_socket_bind (self->priv->socket, bind_address, -- 2.7.4