read hang on datagram socket

Kurt Miller lists at intricatesoftware.com
Thu Jan 26 20:41:14 PST 2006


On Thursday 26 January 2006 7:26 pm, Daniel Eischen wrote:
> On Thu, 26 Jan 2006, Kurt Miller wrote:
> 
> > On Thursday 26 January 2006 6:56 pm, Daniel Eischen wrote:
> > > On Thu, 26 Jan 2006, Kurt Miller wrote:
> > >
> > > > I'm working on 1.5 jdk certification on 5.4 and 6.0. One of the jck
> > > > tests hangs on 5.4 but works ok on 6.0. I've reduced the problem
> > > > down to the following C program that hangs on 5.4 but works fine
> > > > (finishes) on 6.0 and 4.11.
> > > >
> > > > I could use some assistance with finding a work-around to the
> > > > problem or an explanation as to why the program hangs on 5.4.
> > >
> > > It exit'd in the last connect() in Solaris 9.  I modified it
> > > to work -- see below.
> >
> > Thanks, that was my bug (the jdk did it right). It Sill hangs on 5.4
> > though.
> 
> The modified version does not hang on 5.2.  Do you have multiple
> interfaces on your 5.4 box?

No, the 5.4 box is virtually identical to the 6.0 box. I set them both
up at the same time from initial installs for the project.

truk at freebsd5-4$ ifconfig
lnc0: flags=108843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        inet6 fe80::250:56ff:fe40:451a%lnc0 prefixlen 64 scopeid 0x1
        inet 172.16.1.36 netmask 0xffffff00 broadcast 172.16.1.255
        ether 00:50:56:40:45:1a
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
        inet 127.0.0.1 netmask 0xff000000
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2

truk at freebsd6-0$ ifconfig
lnc0: flags=108843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,NEEDSGIANT> mtu 1500
        inet6 fe80::250:56ff:fe40:4533%lnc0 prefixlen 64 scopeid 0x1
        inet 172.16.1.37 netmask 0xffffff00 broadcast 172.16.1.255
        ether 00:50:56:40:45:33
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
        inet 127.0.0.1 netmask 0xff000000

> What happens when you try using non-zero IP addresses and ports?
> 

Setting the ports doesn't effect the problem, however setting the
addresses does. It really seems like binding to INADDR_ANY only binds
to loopback address 127.0.0.1 and not all the interfaces.

If sock1 is bound to the hostAddress and sock2 connects to sock1 at
the hostAddress it works ok. If sock1 is bound to INADDR_ANY and sock2
connects to sock1 using INADDR_ANY it works. but any mixture of of
using INADDR_ANY with the hostAddress fails.

Unfortunately, I don't have control over the addresses, the java
programs do. This particular jck test binds the first socket with
INADDR_ANY (InetAddress.getByName("0.0.0.0")) and connects the second
socket to the first using the hostAddress (InetAddress.getLocalHost()).

netstat output when stopping the program at the sendto call on 5.4
looks like this:
udp4       0      0  localhost.55513        172.16.1.36.52099

on 6.0:
udp4       0      0  172.16.1.37.53952      172.16.1.37.62241

Doesn't the above output indicate a problem with how datagram
sockets are bound to INADDR_ANY? 

Perhaps its related to my configuration. Can anyone else with a
5.4-release system try the program to see if it works for them?

-Kurt


More information about the freebsd-hackers mailing list