[oe-commits] Steffen Sledz : dbus: backport SO_REUSEADDR handling for tcp dbusses from dbus git repo

git version control git at git.openembedded.org
Thu Oct 7 17:24:14 UTC 2010


Module: openembedded.git
Branch: org.openembedded.dev
Commit: 65bd13c8c9e1779b99bf926688fb2d50a037c63d
URL:    http://gitweb.openembedded.net/?p=openembedded.git&a=commit;h=65bd13c8c9e1779b99bf926688fb2d50a037c63d

Author: Steffen Sledz <sledz at dresearch.de>
Date:   Thu Oct  7 19:20:10 2010 +0200

dbus: backport SO_REUSEADDR handling for tcp dbusses from dbus git repo

Signed-off-by: Steffen Sledz <sledz at dresearch.de>

---

 recipes/dbus/dbus/reuseaddr01.patch |   64 +++++++++++++++++++++++++++++++++++
 recipes/dbus/dbus/reuseaddr02.patch |   38 ++++++++++++++++++++
 recipes/dbus/dbus_1.2.24.bb         |    4 ++-
 recipes/dbus/dbus_1.3.1.bb          |    4 ++-
 4 files changed, 108 insertions(+), 2 deletions(-)

diff --git a/recipes/dbus/dbus/reuseaddr01.patch b/recipes/dbus/dbus/reuseaddr01.patch
new file mode 100644
index 0000000..e291bb8
--- /dev/null
+++ b/recipes/dbus/dbus/reuseaddr01.patch
@@ -0,0 +1,64 @@
+From 8f5f340b77b51fed1f036a9ee9f70a31b201f2c9 Mon Sep 17 00:00:00 2001
+From: Sledz <sledz at MOBIL-400-586.intern.dresearch.de>
+Date: Tue, 29 Jun 2010 21:04:15 +0000
+Subject: sysdeps-unix: enable address reuse on TCP sockets
+
+This helps to avoid 'Address already in use' problems if server has been shut
+down, and then restarted while sockets are still active on its port.
+
+Signed-off-by: Steffen Sledz <sledz at dresearch.de>
+---
+diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c
+index ce3475a..b58d09a 100644
+--- a/dbus/dbus-sysdeps-unix.c
++++ b/dbus/dbus-sysdeps-unix.c
+@@ -623,6 +623,7 @@ _dbus_listen_unix_socket (const char     *path,
+   int listen_fd;
+   struct sockaddr_un addr;
+   size_t path_len;
++  unsigned int reuseaddr;
+ 
+   _DBUS_ASSERT_ERROR_IS_CLEAR (error);
+ 
+@@ -696,7 +697,15 @@ _dbus_listen_unix_socket (const char     *path,
+ 	
+       strncpy (addr.sun_path, path, path_len);
+     }
+-  
++
++  reuseaddr = 1;
++  if (setsockopt  (listen_fd, SOL_SOCKET, SO_REUSEADDR, &reuseaddr, sizeof(reuseaddr))==-1)
++    {
++      dbus_set_error (error, _dbus_error_from_errno (errno),
++                      "Failed to set socket option\"%s\": %s",
++                      path, _dbus_strerror (errno));
++    }
++
+   if (bind (listen_fd, (struct sockaddr*) &addr, _DBUS_STRUCT_OFFSET (struct sockaddr_un, sun_path) + path_len) < 0)
+     {
+       dbus_set_error (error, _dbus_error_from_errno (errno),
+@@ -870,6 +879,7 @@ _dbus_listen_tcp_socket (const char     *host,
+   int nlisten_fd = 0, *listen_fd = NULL, res, i;
+   struct addrinfo hints;
+   struct addrinfo *ai, *tmp;
++  unsigned int reuseaddr;
+ 
+   *fds_p = NULL;
+   _DBUS_ASSERT_ERROR_IS_CLEAR (error);
+@@ -915,6 +925,14 @@ _dbus_listen_tcp_socket (const char     *host,
+         }
+       _DBUS_ASSERT_ERROR_IS_CLEAR(error);
+ 
++      reuseaddr = 1;
++      if (setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, &reuseaddr, sizeof(reuseaddr))==-1)
++        {
++          dbus_set_error (error, _dbus_error_from_errno (errno),
++                          "Failed to set socket option \"%s:%s\": %s",
++                          host ? host : "*", port, _dbus_strerror (errno));
++        }
++
+       if (bind (fd, (struct sockaddr*) tmp->ai_addr, tmp->ai_addrlen) < 0)
+         {
+           _dbus_close(fd, NULL);
+--
+cgit v0.8.3-6-g21f6
diff --git a/recipes/dbus/dbus/reuseaddr02.patch b/recipes/dbus/dbus/reuseaddr02.patch
new file mode 100644
index 0000000..10bc7ed
--- /dev/null
+++ b/recipes/dbus/dbus/reuseaddr02.patch
@@ -0,0 +1,38 @@
+From d365dd8141e709222f3a619d7b04ec4ded6429fd Mon Sep 17 00:00:00 2001
+From: Havoc Pennington <hp at pobox.com>
+Date: Tue, 31 Aug 2010 15:59:09 +0000
+Subject: Change failure of setsockopt SO_REUSEADDR to be a warning, not set an error
+
+It was previously setting an error but then continuing, which is
+not allowed since errors can't be "piled up"
+---
+diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c
+index e4ff6ee..3205bed 100644
+--- a/dbus/dbus-sysdeps-unix.c
++++ b/dbus/dbus-sysdeps-unix.c
+@@ -980,9 +980,8 @@ _dbus_listen_unix_socket (const char     *path,
+   reuseaddr = 1;
+   if (setsockopt  (listen_fd, SOL_SOCKET, SO_REUSEADDR, &reuseaddr, sizeof(reuseaddr))==-1)
+     {
+-      dbus_set_error (error, _dbus_error_from_errno (errno),
+-                      "Failed to set socket option\"%s\": %s",
+-                      path, _dbus_strerror (errno));
++      _dbus_warn ("Failed to set socket option\"%s\": %s",
++                  path, _dbus_strerror (errno));
+     }
+ 
+   if (bind (listen_fd, (struct sockaddr*) &addr, _DBUS_STRUCT_OFFSET (struct sockaddr_un, sun_path) + path_len) < 0)
+@@ -1335,9 +1334,8 @@ _dbus_listen_tcp_socket (const char     *host,
+       reuseaddr = 1;
+       if (setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, &reuseaddr, sizeof(reuseaddr))==-1)
+         {
+-          dbus_set_error (error, _dbus_error_from_errno (errno),
+-                          "Failed to set socket option \"%s:%s\": %s",
+-                          host ? host : "*", port, _dbus_strerror (errno));
++          _dbus_warn ("Failed to set socket option \"%s:%s\": %s",
++                      host ? host : "*", port, _dbus_strerror (errno));
+         }
+ 
+       if (bind (fd, (struct sockaddr*) tmp->ai_addr, tmp->ai_addrlen) < 0)
+--
+cgit v0.8.3-6-g21f6
diff --git a/recipes/dbus/dbus_1.2.24.bb b/recipes/dbus/dbus_1.2.24.bb
index a2b7eea..5ef1fef 100644
--- a/recipes/dbus/dbus_1.2.24.bb
+++ b/recipes/dbus/dbus_1.2.24.bb
@@ -1,6 +1,6 @@
 include dbus.inc
 
-PR = "${INC_PR}.0"
+PR = "${INC_PR}.1"
 
 SRC_URI = "\
   http://dbus.freedesktop.org/releases/dbus/dbus-${PV}.tar.gz;name=dbus \
@@ -8,6 +8,8 @@ SRC_URI = "\
   file://fix-install-daemon.patch \
   file://0001-Make-the-default-DBus-reply-timeout-configurable.patch \
   file://dbus-1.init \
+  file://reuseaddr01.patch \
+  file://reuseaddr02.patch \
 "
 
 SRC_URI[dbus.md5sum] = "565346cecd9cfecf1463540c6086cc2c"
diff --git a/recipes/dbus/dbus_1.3.1.bb b/recipes/dbus/dbus_1.3.1.bb
index 2d09dc9..b30bdab 100644
--- a/recipes/dbus/dbus_1.3.1.bb
+++ b/recipes/dbus/dbus_1.3.1.bb
@@ -1,5 +1,5 @@
 include dbus.inc
-PR = "${INC_PR}.1"
+PR = "${INC_PR}.2"
 
 SRC_URI = "\
   http://dbus.freedesktop.org/releases/dbus/dbus-${PV}.tar.gz \
@@ -9,6 +9,8 @@ SRC_URI = "\
   file://fix-install-daemon.patch \
   file://add-configurable-reply-timeouts.patch \
   file://dbus-1.init \
+  file://reuseaddr01.patch \
+  file://reuseaddr02.patch \
 "            
 
 # This is a development version of dbus that will lead to 1.4.0





More information about the Openembedded-commits mailing list