[Spread-users] bzero and bind() on FreeBSD
Yair Amir
yairamir at cnds.jhu.edu
Sat Apr 6 21:40:57 EST 2002
Hi Joshua,
The idea behind the fix looks good to me.
Probably using memset is better than bzero for portability sake.
Cheers,
:) Yair.
Joshua Goodall wrote:
> This was interesting: whilst working on the updated FreeBSD port
> for 3.16.2, I ran into some trouble when testing Spread_Segment
> with the extra interface stanza (e.g.
>
> Spread_Segment 10.1.2.255 {
> host1 10.1.2.1 {
> D 10.1.2.1
> C 127.0.0.1
> }
> host2 10.1.2.2 {
> D 10.1.2.2
> C 127.0.0.1
> }
> }
>
> ... the OS refused to allow a UDP bind to 10.1.2.1!
>
> Much head-scratching ensued. The problem eventually revealed itself
> as a lack of bzero'ing the struct sockaddr_in, to which the syscall
> was very sensitive (in particular, the sin_zero part).
>
> The following patches fixed the problem. I have not tested them
> on any other platform, but they fixed this oddity, and they're going
> into the FreeBSD port of 3.16.2.
>
> Joshua
>
> --- data_link.c.orig Sat Apr 6 22:45:23 2002
> +++ data_link.c Sat Apr 6 22:48:01 2002
> @@ -93,6 +93,7 @@
> {
> soc_addr.sin_family = AF_INET;
> soc_addr.sin_port = htons(port);
> + bzero(&soc_addr.sin_zero, sizeof(soc_addr.sin_zero));
> if (interface_address == 0)
> soc_addr.sin_addr.s_addr= INADDR_ANY;
> else
> --- session.c.orig Sat Apr 6 22:47:26 2002
> +++ session.c Sat Apr 6 22:47:42 2002
> @@ -347,6 +347,7 @@
>
> /* Initiation of the INET socket */
>
> + bzero(&inet_addr.sin_zero, sizeof(inet_addr.sin_zero));
> inet_addr.sin_family = AF_INET;
> inet_addr.sin_port = htons(port);
> Accept_inet_mbox_num = 0;
>
>
> _______________________________________________
> Spread-users mailing list
> Spread-users at lists.spread.org
> http://lists.spread.org/mailman/listinfo/spread-users
>
>
>
More information about the Spread-users
mailing list