You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Andrew Zhang (JIRA)" <ji...@apache.org> on 2006/06/29 11:21:30 UTC

[jira] Updated: (HARMONY-707) [classlib][nio] java.nio.channels.ServerSocketChannel.accept() method changes the value of SO_TIMEOUT if there are no pending connections in nonblocking mode.

     [ http://issues.apache.org/jira/browse/HARMONY-707?page=all ]

Andrew Zhang updated HARMONY-707:
---------------------------------

    Attachment: nio.diff

Hello,

Would you please try my patch? 

This patch fixes following problems:

1. Current ly, Harmony takes "block accpet + timeout" to simulate non blocking accept. So the SO_TIMEOUT value is changed during accept operation.  The patch fixes the problem, and use select to implement non blocking operation.

2. Remove duplicated security check. 

Thanks!

Best regards,
Andrew

> [classlib][nio] java.nio.channels.ServerSocketChannel.accept() method changes the value of SO_TIMEOUT if there are no pending connections in nonblocking mode.
> --------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>          Key: HARMONY-707
>          URL: http://issues.apache.org/jira/browse/HARMONY-707
>      Project: Harmony
>         Type: Bug

>   Components: Classlib
>     Reporter: Andrew Zhang
>     Priority: Minor
>  Attachments: nio.diff
>
> java.nio.channels.ServerSocketChannel.accept() method changes the value of SO_TIMEOUT if there are no pending connections in nonblocking mode. 
> I'll upload a patch soon. Thanks!
> Test case: 
>        public void test_accept() throws IOException {
>         final int SO_TIMEOUT = 800;
>         ServerSocketChannel sc = ServerSocketChannel.open();
>         try {
>             ServerSocket ss = sc.socket();
>             ss.bind(new InetSocketAddress("127.0.0.1", 0));
>             sc.configureBlocking(false);
>             ss.setSoTimeout(SO_TIMEOUT);
>             SocketChannel client = sc.accept();
>             // non blocking mode, returns null since there are no pending connections.
>             assertNull(client);
>             int soTimeout = ss.getSoTimeout();
>             // Harmony fails here.
>             assertEquals(SO_TIMEOUT, soTimeout);
>         } finally {
>             sc.close();
>         }
>     }
> Test result:
>     RI 5.0 passes the test while Harmony fails.
> Best regards,
> Andrew

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira