Package: minissdpd
Version: 1.0-2
Severity: critical
Tags: patch
Hi,
Minissdpd will not coexist with other apps that wish to listen to SSDP
multicast traffic.
- minissdpd will refuse to start if another SSDP app is running (i.e.
already using the UDP port)
- when minissdpd is running, other apps, which normally start fine and
peacefully coexist with each other, fail to start.
(e.g. upnp-router-control and gssdp-device-sniffer)
debian:root ~ 113 # ps ax | grep minissdpd
17975 ? Ss 0:00 minissdpd -i 0.0.0.0
17990 pts/4 S+ 0:00 grep minissdpd
debian:root ~ 114 # upnp-router-control
* Initializing GUI...
* Showing GUI...
* Starting UPnP Resource discovery...
** ERROR **: \u001b[31m[EE]\u001b[0m gupnp_context_new: Failed to bind
socketError binding to address: Address already in use (33)
aborting...
Aborted
debian:root ~ 115 # gssdp-device-sniffer
Error creating the GSSDP client: Failed to bind socketError binding to address:
Address already in use
debian:root ~ 116 #
---------
debian:root ~ 234 # upnp-router-control &
[2] 21274
debian:root ~ 235 # * Initializing GUI...
* Showing GUI...
* Starting UPnP Resource discovery... done
debian:root ~ 235 # gssdp-device-sniffer &
[3] 21276
debian:root ~ 236 # minissdpd -d -i 0.0.0.0
minissdpd[21277]: bind(udp): Address already in use
minissdpd[21277]: Cannot open socket for receiving SSDP messages, exiting
debian:root ~ 237 #
The problem is that minissdpd does not set the SO_REUSEADDR option on the
UDP socket. Other apps (e.g. upnp-router-control and gssdp-device-sniffer) do
set SO_REUSEADDR.
I have attached a patch to fix this.
I hereby allow this patch to be included in, and redistributed with, minidsspd
or any derived software using the same license that minissdpd 1.0-2 (as found
in debian on oct 6, 2011) uses.
If this is not sufficient, please ask, and I'll reformulate to something
acceptable.
Regards,
Rogier.
Patch:
----------------------------
diff -aur minissdpd-1.0/openssdpsocket.c
minissdpd-1.0-patch-sharesock/openssdpsocket.c
--- minissdpd-1.0/openssdpsocket.c 2008-10-04 12:53:03.000000000 +0200
+++ minissdpd-1.0-patch-sharesock/openssdpsocket.c 2011-10-06
13:59:40.000000000 +0200
@@ -42,6 +42,8 @@
const char * *
listen_addr)
{
int s;
+ int rv;
+ int opt;
struct sockaddr_in sockname;
if( (s = socket(PF_INET, SOCK_DGRAM, 0)) < 0)
@@ -58,6 +60,15 @@
sockname.sin_addr.s_addr = htonl(INADDR_ANY);
/*sockname.sin_addr.s_addr = inet_addr(ifaddr);*/
+ opt = 1;
+ rv = setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
+ if (rv < 0)
+ {
+ syslog(LOG_ERR, "setsockopt(SO_REUSEADDR): %m");
+ close(s);
+ return -1;
+ }
+
if(bind(s, (struct sockaddr *)&sockname, sizeof(struct sockaddr_in)) < 0)
{
syslog(LOG_ERR, "bind(udp): %m");
----------------------------
-- System Information:
Debian Release: wheezy/sid
APT prefers stable-updates
APT policy: (500, 'stable-updates'), (500, 'testing')
Architecture: i386 (x86_64)
Kernel: Linux 2.6.38-2-amd64 (SMP w/1 CPU core)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Versions of packages minissdpd depends on:
ii libc6 2.13-10 Embedded GNU C Library: Shared lib
minissdpd recommends no packages.
minissdpd suggests no packages.
-- no debconf information
--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]