[gssdp] Fix functionality on OpenBSD
- From: Jens Georg <jensgeorg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gssdp] Fix functionality on OpenBSD
- Date: Wed, 6 Jul 2011 17:22:32 +0000 (UTC)
commit 8284e59867d24dbb341da5c65b2458f48e211c20
Author: Jens Georg <mail jensge org>
Date: Thu Jun 30 21:51:11 2011 +0200
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,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]