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