Unexpected exception in the selector loop. java.lang.Error: java.net.SocketException: Socket operation on nonsocket: getsockname ...

Trustin Lee trustin at gleamynode.net
Tue Feb 3 22:24:29 EST 2009


I ran the code you provided with my machine and was not able to
reproduce the problem.  Could you try with the latest SVN snapshot?  I
think you are using an older revision.  Also, please let me know your
environment - O/S, CPU, and JVM version.

HTH,

— Trustin Lee, http://gleamynode.net/

On Wed, Feb 4, 2009 at 11:57 AM, Wesly smith <weslysmith0 at gmail.com> wrote:
>
> I have a simple HttpClient which is modified from the netty example as below.
> The client just do connect(), and then close() the connection in a loop for
> testing the server availability. From time to time, I saw the exception as
> below.
> It is very easy to re-produce. I saw both on the apache tomcat and my
> home-made http server.
>
> Any suggestions about the problem itself or a better way to test the far-end
> server availability will be highly appreciated.
>
> </pre>
> connect 1233711200921
> connect closed 1233711200921
> connect 1233711215921
> connect closed 1233711215937
> connect 1233711230937
> connect closed 1233711230953
> Feb 3, 2009 7:33:50 PM org.jboss.netty.channel.socket.nio.NioWorker
> WARNING: Unexpected exception in the selector loop.
> java.lang.Error: java.net.SocketException: Socket operation on nonsocket:
> getsockname
>        at sun.nio.ch.Net.localAddress(Net.java:125)
>        at sun.nio.ch.SocketChannelImpl.localAddress(SocketChannelImpl.java:430)
>        at sun.nio.ch.SocketAdaptor.getLocalAddress(SocketAdaptor.java:147)
>        at java.net.Socket.getLocalSocketAddress(Socket.java:697)
>        at
> org.jboss.netty.channel.socket.nio.NioSocketChannel.getLocalAddress(NioSocketChannel.java:88)
>        at
> org.jboss.netty.channel.socket.nio.NioWorker$RegisterTask.run(NioWorker.java:726)
>        at
> org.jboss.netty.channel.socket.nio.NioWorker.processRegisterTaskQueue(NioWorker.java:218)
>        at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:157)
>        at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>        at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>        at java.lang.Thread.run(Thread.java:619)
> Caused by: java.net.SocketException: Socket operation on nonsocket:
> getsockname
>        at sun.nio.ch.Net.localInetAddress(Native Method)
>        at sun.nio.ch.Net.localAddress(Net.java:122)
>        ... 10 more
> connect 1233711245953
> connect closed 1233711245953
> </pre>
>
> The Sample Client code. You can use the Handler and PipelineFactory as in
> the netty example for re-produce the problem.
> <pre>
> import java.net.InetSocketAddress;
> import java.net.URI;
> import java.util.concurrent.Executors;
>
> import org.jboss.netty.bootstrap.ClientBootstrap;
> import org.jboss.netty.buffer.ChannelBuffer;
> import org.jboss.netty.buffer.ChannelBuffers;
> import org.jboss.netty.channel.Channel;
> import org.jboss.netty.channel.ChannelFactory;
> import org.jboss.netty.channel.ChannelFuture;
> import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory;
> import org.jboss.netty.handler.codec.http.DefaultHttpRequest;
> import org.jboss.netty.handler.codec.http.HttpHeaders;
> import org.jboss.netty.handler.codec.http.HttpMethod;
> import org.jboss.netty.handler.codec.http.HttpRequest;
> import org.jboss.netty.handler.codec.http.HttpVersion;
>
> public class HttpClient {
>
>    public static void main(String[] args) throws Exception {
>        if (args.length != 1) {
>            System.err.println(
>                    "Usage: " + HttpClient.class.getSimpleName() +
>                    " <URL>");
>            return;
>        }
>
>        URI uri = new URI(args[0]);
>        String scheme = uri.getScheme() == null? "http" : uri.getScheme();
>        String host = uri.getHost() == null? "localhost" : uri.getHost();
>        int port = uri.getPort() == -1? 80 : uri.getPort();
>
>        if (!scheme.equals("http")) {
>            // We can actually support HTTPS fairly easily by inserting
>            // an SslHandler to the pipeline - left as an exercise.
>            System.err.println("Only HTTP is supported.");
>            return;
>        }
>
>        // Configure the client.
>        ChannelFactory factory =
>            new NioClientSocketChannelFactory(
>                    Executors.newCachedThreadPool(),
>                    Executors.newCachedThreadPool());
>
>        ClientBootstrap bootstrap = new ClientBootstrap(factory);
>        HttpClientPipelineFactory handler = new
> HttpClientPipelineFactory(new HttpResponseHandler());
>        bootstrap.setPipelineFactory(handler);
>        bootstrap.setOption("keepAlive", true);
>
>        // Send the HTTP request.
>        for ( int loop = 0; loop < 10000; loop++)
>        {
>                System.out.println("connect "+System.currentTimeMillis());
>                // Start the connection attempt.
>                ChannelFuture future = bootstrap.connect(new
> InetSocketAddress(
>                                host, port));
>
>                // Wait until the connection attempt succeeds or fails.
>                Channel channel =
> future.awaitUninterruptibly().getChannel();
>                if (!future.isSuccess()) {
>                        future.getCause().printStackTrace();
>                        factory.releaseExternalResources();
>                        return;
>                }
>
>                // just close after connection
>                if (channel.isConnected() == false)
>                {
>                        System.out.println("Host is not reachable");
>                }
>                else
>                {
>                        channel.close();
>                        System.out.println("connect closed
> "+System.currentTimeMillis());
>                }
>
>                // sleep enough
>                Thread.sleep(15000);
>        }
>        // Shut down executor threads to exit.
>        factory.releaseExternalResources();
>    }
> }
> </pre>
> --
> View this message in context: http://n2.nabble.com/Unexpected-exception-in-the-selector-loop.-java.lang.Error%3A-java.net.SocketException%3A-Socket-operation-on-nonsocket%3A-getsockname-...-tp2266877p2266877.html
> Sent from the Netty User Group mailing list archive at Nabble.com.
>
> _______________________________________________
> netty-users mailing list
> netty-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/netty-users
>




More information about the netty-users mailing list