Native Socket Error On OS X (BSDs)
Xiaobin.Lu at Sun.COM
Tue Dec 23 10:20:27 PST 2008
Thanks for your investigation on this. So instead of removing the Apple
specific code, can we just detect the "-1" argument and pass "NULL" to
select as the last argument which has equivalent meaning as "-1" to
"poll"? I think that might be a safer fix than just removing that code.
My 2 cents.
On 12/22/08 20:30, Michael Franz wrote:
> By not using the APPLE specific code the connections work. The reason
> the select does not is that there is an invalid argument being passed
> to it. The invalid argument is a -1 for the time out.
> I assume that a -1 to poll is valid parameter and it just works.
> On Mon, Dec 22, 2008 at 5:26 PM, Xiaobin Lu <Xiaobin.Lu at sun.com
> <mailto:Xiaobin.Lu at sun.com>> wrote:
> So if I understand correctly, the usage under "#ifdef __APPLE__"
> isn't working properly, in other words, using "select" is
> problematic in this case. But my question is "why using poll
> instead of select worked?"
> Thanks so much in advance for your clarification.
> Michael Franz wrote:
> On Mon, Dec 22, 2008 at 9:29 AM, Greg Lewis
> <glewis at eyesbeyond.com <mailto:glewis at eyesbeyond.com>
> <mailto:glewis at eyesbeyond.com <mailto:glewis at eyesbeyond.com>>>
> 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
> > 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
> > 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
> that change for you.
> > #ifdef __APPLE__
> > // XXXDARWIN: poll() appears non-interruptable on
> > Thread.interrupt() failed to
> > // cause interrupt. Does poll work at all on Tiger? Needs
> > 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,
> &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 <mailto:glewis at eyesbeyond.com>
> <mailto:glewis at eyesbeyond.com <mailto:glewis at eyesbeyond.com>>
> Eyes Beyond Web :
> Information Technology FreeBSD :
> glewis at FreeBSD.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the bsd-port-dev