ServerSocket::accept
Eric Wong
wongsinwey@yahoo.com
Tue Jul 6 16:08:00 GMT 2004
Hi,
In version 3.4.0/1, ServerSocket.accept() creates a
new Socket() and then in the process invoke
Socket.getImpl(), which goes something like this:
-----
SocketImpl getImpl() throws SocketException
try
{
if (!implCreated)
{
impl.create(true);
implCreated = true;
}
}
catch (IOException e)
{
throw new SocketException(e.getMessage());
}
return impl;
-----
But create(true) alone will cause
natPlainSocketImplPosix.cc (depending on the platform)
to create a fresh yet never-been-used socket
descriptor. As a result, lsof will show:
> socktest 31812 root 8u sock 0,0 1364355 can't
identify protocol
So each ServerSocket.accept() call will generate
additional descriptor until we get EMFILE error ("Too
many open files").
(At first, i thought the run-out-of-file-descriptors
issue has got something to do with proper socket
closures!)
eric
__________________________________
Do you Yahoo!?
Yahoo! Mail - 50x more storage than other providers!
http://promotions.yahoo.com/new_mail
More information about the Java
mailing list