From owner-freebsd-questions@FreeBSD.ORG Thu Dec 17 20:28:22 2009 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id F1D661065692 for ; Thu, 17 Dec 2009 20:28:22 +0000 (UTC) (envelope-from pieter@degoeje.nl) Received: from mx.utwente.nl (mx3.utsp.utwente.nl [130.89.2.14]) by mx1.freebsd.org (Postfix) with ESMTP id 7852B8FC20 for ; Thu, 17 Dec 2009 20:28:22 +0000 (UTC) Received: from nox.student.utwente.nl (nox.student.utwente.nl [130.89.165.91]) by mx.utwente.nl (8.12.10/SuSE Linux 0.7) with ESMTP id nBHKSEHH003086; Thu, 17 Dec 2009 21:28:14 +0100 From: Pieter de Goeje To: freebsd-questions@freebsd.org Date: Thu, 17 Dec 2009 21:28:14 +0100 User-Agent: KMail/1.9.10 References: In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200912172128.14426.pieter@degoeje.nl> X-UTwente-MailScanner-Information: Scanned by MailScanner. Contact icts.servicedesk@utwente.nl for more information. X-UTwente-MailScanner: Found to be clean X-UTwente-MailScanner-SpamScore: s X-UTwente-MailScanner-From: pieter@degoeje.nl X-Spam-Status: No Cc: Dex Nada Subject: Re: Joining multiple Multicast Streams X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 17 Dec 2009 20:28:23 -0000 On Thursday 17 December 2009 19:45:24 Dex Nada wrote: > Hi: > > I am writing an application that joins a multicast stream on a specific UDP > port. But when I run more than one instance of the same application, the > second instance complains that the port is already in use. For example if I > join stream 229.10.10.133:2000 on one instance and 229.10.10..134:2000 on > another instance, the second one fails to join - I can however join it if I > kill the first instance. I have compiled that application with SOCKET_REUSE > option, but I wonder if I need to enable/recompile-with any special > multicast kernel option for this to work. I do not have this problem when I > run this code on Linux (Ubuntu 9.10) but I really want to get this working > on FreeBSD. > > Thanks in advance. > > -DxN Try SO_REUSEPORT. The manpage (getsockopt(2)) specifically mentions multiple listeners for the same multicast stream. The following pseudo C seems to work fine: int reuseport = 1; memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = htonl(INADDR_ANY); addr.sin_port = htons(port); mreq.imr_multiaddr.s_addr = maddr; mreq.imr_interface.s_addr = INADDR_ANY; int fd = socket(AF_INET, SOCK_DGRAM, 0); setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &reuseport, sizeof(reuseport)); bind(fd, (struct sockaddr *)&addr, sizeof(addr)); setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)); recvfrom(fd, ....); Good luck, Pieter de Goeje