Andrew Mould
2008-10-21 23:35:55 UTC
We're having a weird TCP/IP / Java / environmental problem on a system, I'd
appreciate some feedback on. The problem is in a third-party library that
when it tries to create a socket ends up reporting an exception:
[Dynamic-linking native method java.net.PlainSocketImpl.socketCreate ...
JNI]
Exception getting web server portjava.io.IOException: No such file or
directory (errno:4002) .
It looks like the low-level OSS-specific layers under Java are reporting
this. We have no idea what "file or directory" doesn't exist. We see errors
4001, 4003 & 4004 documented in the manuals, but not this one!
Our theories are that it could be a bad TCP/IP config or something to do
with a DEFINE name. Javachk doesn't show any problems though. But if we
purposefully create a bad DEFINE name for TCPIP^PROCESS^NAME on another
system, then that system does create that exception, but then fails in a
different way. Our theory here being that the low-level implementation
translates a Java socket call into something more traditional (from an NSK
point of view) that requires a named process which is somehow derived
wrongly from the define name. However the define name for TCPIP^PROCESS^NAME
on the failing system is good, as far as we can tell!
I was surprised that the Java app is sensitve to the TCPIP^PROCESS^NAME
define names, as I'd have thought that should be entirely "under the hood".
But even if under the hood I guess the implementation may still have to
decide which TCPIP process to use, and I have no idea how it automatically
resolves that, unless it does some enquiry on SCF. Anyone know how that all
works? Or are multi-homed Java apps not possible on OSS without having to
write 'extensions'.
Finally trying this on another system where it does work, we don't see any
ports in use by the Java app in SCF. Is there some other method to finding
the ports being used by Java?!
Thanks for any and all feedback
- Andrew
appreciate some feedback on. The problem is in a third-party library that
when it tries to create a socket ends up reporting an exception:
[Dynamic-linking native method java.net.PlainSocketImpl.socketCreate ...
JNI]
Exception getting web server portjava.io.IOException: No such file or
directory (errno:4002) .
It looks like the low-level OSS-specific layers under Java are reporting
this. We have no idea what "file or directory" doesn't exist. We see errors
4001, 4003 & 4004 documented in the manuals, but not this one!
Our theories are that it could be a bad TCP/IP config or something to do
with a DEFINE name. Javachk doesn't show any problems though. But if we
purposefully create a bad DEFINE name for TCPIP^PROCESS^NAME on another
system, then that system does create that exception, but then fails in a
different way. Our theory here being that the low-level implementation
translates a Java socket call into something more traditional (from an NSK
point of view) that requires a named process which is somehow derived
wrongly from the define name. However the define name for TCPIP^PROCESS^NAME
on the failing system is good, as far as we can tell!
I was surprised that the Java app is sensitve to the TCPIP^PROCESS^NAME
define names, as I'd have thought that should be entirely "under the hood".
But even if under the hood I guess the implementation may still have to
decide which TCPIP process to use, and I have no idea how it automatically
resolves that, unless it does some enquiry on SCF. Anyone know how that all
works? Or are multi-homed Java apps not possible on OSS without having to
write 'extensions'.
Finally trying this on another system where it does work, we don't see any
ports in use by the Java app in SCF. Is there some other method to finding
the ports being used by Java?!
Thanks for any and all feedback
- Andrew