Native Socket Error On OS X (BSDs)
Michael Franz
mvfranz at gmail.com
Mon Dec 22 06:55:55 PST 2008
Greg,
On Mon, Dec 22, 2008 at 9:29 AM, Greg Lewis <glewis at eyesbeyond.com> wrote:
> G'day Michael,
>
> On Sun, Dec 21, 2008 at 09:16:41PM -0500, Michael Franz wrote:
> > I have been investigating this more and been trying to figure out where
> > NET_Timeout is defined on OS X. It is being called in PlanSocketImpl.c.
> > There are two definitions that I have found, one for linux and one for
> bsd.
> > A third uses JVM_Timeout. The bsd version is specific to FreeBSD. Are
> > there known issues with JVM_Timeout? Why does Linux and FreeBSD need
> > definitions that are different from the one in Hotspot?
>
Based on the fact that Solaris does not have a specific version and Linux
and FreeBSD do, the HotSpot implementation should be available. It might be
a good time to remove the Linux and FreeBSD version so that all the
platforms use the same code.
>
> They look very similar don't they. I wonder if the HotSpot version is
> actually exposed for the JDK code to use?
>
> > jdk/src/solaris/native/java/net/bsd_close.c
> > jdk/src/solaris/native/java/net/linux_close.c
> > hotspot/src/os/bsd/vm/hpi_bsd.hpp
> >
> > I changed the inline int hpi::timeout(int fd, long timeout) method to not
> > use the Apple specific code and I think the problem is fixed (at least
> for
> > me).
>
Yes, just ignoring/removing the Apple specific coding seemed to fix the
problem.
I did not do any deep research into socket programming on OS X. Anyone with
knowledge of sockets on OS X comment on the comments? Is poll on Tiger
really not interruptable?
>
> So just removing the __APPLE__ code below fixes it for you? I can commit
> that change for you.
>
> > #ifdef __APPLE__
> > // XXXDARWIN: poll() appears non-interruptable on Leopard:
> > Thread.interrupt() failed to
> > // cause interrupt. Does poll work at all on Tiger? Needs
> investigation.
> > fd_set fdset;
> > struct timeval seltv;
> >
> > FD_ZERO(&fdset);
> > FD_SET(fd, &fdset);
> >
> > seltv.tv_sec = timeout / 1000;
> > seltv.tv_usec = (timeout % 1000) * 1000;
> >
> > INTERRUPTIBLE_NORESTART(::select(fd+1, &fdset, NULL, NULL, &seltv),
> res,
> > os::Bsd::clear_interrupted);
> > #else
> > struct pollfd pfd;
> >
> > pfd.fd = fd;
> > pfd.events = POLLIN | POLLERR;
> >
> > INTERRUPTIBLE_NORESTART(::poll(&pfd, 1, timeout), res,
> > os::Bsd::clear_interrupted);
> > #endif
> >
> > Michael
> >
> --
> Greg Lewis Email : glewis at eyesbeyond.com
> Eyes Beyond Web : http://www.eyesbeyond.com
> Information Technology FreeBSD : glewis at FreeBSD.org
>
Michael
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/bsd-port-dev/attachments/20081222/3883a432/attachment.html
More information about the bsd-port-dev
mailing list