Date: Thu, 8 Jan 2009 10:10:44 +0100 From: Pieter de Goeje <pieter@degoeje.nl> To: freebsd-questions@freebsd.org Cc: Peter Steele <psteele@maxiscale.com> Subject: Re: Do UDP broadcasts work in FreeBSD? Message-ID: <200901081010.45049.pieter@degoeje.nl> In-Reply-To: <2ACA3DE8F9758A48B8BE2C7A847F91F2479DF3@polaris.maxiscale.com> References: <2ACA3DE8F9758A48B8BE2C7A847F91F2479DF3@polaris.maxiscale.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tuesday 06 January 2009 17:49:49 Peter Steele wrote: > Our efforts so far indicate the answer is no, which baffles us. We want > to send a limited broadcast to 255.255.255.255 but the message never > arrives. The same code works fine under Linux. Is there a trick for > doing this kind of thing under FreeBSD? Did you enable SO_BROADCAST and IP_ONESBCAST on the socket? I remember needing this on FreeBSD but not on Linux. I know UDP broadcasting works fine, but is somewhat more involved: addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr("130.89.191.255"); addr.sin_port = htons(UDP_PORT_ET); optval = 1; if(setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &optval, sizeof optval) == -1) err(1, "setsockopt"); optval = 1; if(setsockopt(sock, IPPROTO_IP, IP_ONESBCAST, &optval, sizeof optval) == -1) err(1, "setsockopt"); const char data[] = "report"; if(sendto(sock, data, sizeof data, 0, (struct sockaddr*)&addr, addrlen) == -1) warn("sendto"); This code will send a packet with destination address 255.255.255.255, on the interface with broadcast address 130.89.191.255. netintro(4) talks about how to discover these addresses. SO_ONESBCAST is documented in ip(4), SO_BROADCAST in getsockopt(4). -- Pieter de Goeje
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200901081010.45049.pieter>