You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ad...@apache.org on 2004/05/01 19:23:55 UTC

cvs commit: incubator-geronimo/modules/network/src/java/org/apache/geronimo/network/protocol ServerSocketAcceptor.java SocketProtocol.java

adc         2004/05/01 10:23:55

  Modified:    modules/network/src/java/org/apache/geronimo/network/protocol
                        ServerSocketAcceptor.java SocketProtocol.java
  Log:
  When a connection is closed it may remain in a timeout state for a short
  period of time.  In such cases, it is not possible to bind a socket to the
  required address if a previous connection to the same address is in a
  timeout state.
  
  Revision  Changes    Path
  1.7       +21 -10    incubator-geronimo/modules/network/src/java/org/apache/geronimo/network/protocol/ServerSocketAcceptor.java
  
  Index: ServerSocketAcceptor.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/network/src/java/org/apache/geronimo/network/protocol/ServerSocketAcceptor.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- ServerSocketAcceptor.java	25 Apr 2004 02:03:37 -0000	1.6
  +++ ServerSocketAcceptor.java	1 May 2004 17:23:55 -0000	1.7
  @@ -46,7 +46,8 @@
   
       private ServerSocketChannel serverSocketChannel;
       private int timeOut;
  -    private boolean enableTcpNoDelay;
  +    private boolean TCPNoDelay;
  +    private boolean reuseAddress = true;
       private SelectorManager selectorManager;
       private SelectionKey selectionKey;
   
  @@ -88,13 +89,22 @@
           this.timeOut = timeOut;
       }
   
  -    public boolean isEnableTcpNoDelay() {
  -        return enableTcpNoDelay;
  +    public boolean isTCPNoDelay() {
  +        return TCPNoDelay;
       }
   
  -    public void setEnableTcpNoDelay(boolean enableTcpNoDelay) {
  +    public void setTCPNoDelay(boolean TCPNoDelay) {
           if (state == STARTED || state == FAILED) throw new IllegalStateException("Protocol already started");
  -        this.enableTcpNoDelay = enableTcpNoDelay;
  +        this.TCPNoDelay = TCPNoDelay;
  +    }
  +
  +    public boolean isReuseAddress() {
  +        return reuseAddress;
  +    }
  +
  +    public void setReuseAddress(boolean reuseAddress) {
  +        if (state == STARTED || state == FAILED) throw new IllegalStateException("Protocol already started");
  +        this.reuseAddress = reuseAddress;
       }
   
       public ServerSocketAcceptorListener getAcceptorListener() {
  @@ -119,13 +129,14 @@
           String serverBindAddress = uri.getHost();
           int serverBindPort = uri.getPort();
           int connectBackLog = 50;
  -        enableTcpNoDelay = true;
  +        TCPNoDelay = true;
   
           Properties params = URISupport.parseQueryParameters(uri);
  -        enableTcpNoDelay = params.getProperty("tcp.nodelay", "true").equals("true");
  +        TCPNoDelay = params.getProperty("tcp.nodelay", "true").equals("true");
           connectBackLog = Integer.parseInt(params.getProperty("tcp.backlog", "50"));
   
           serverSocketChannel = ServerSocketChannel.open();
  +        serverSocketChannel.socket().setReuseAddress(reuseAddress);
           serverSocketChannel.socket().bind(new InetSocketAddress(InetAddress.getByName(serverBindAddress), serverBindPort), connectBackLog);
           serverSocketChannel.socket().setSoTimeout(timeOut);
           serverSocketChannel.configureBlocking(false);
  @@ -133,7 +144,7 @@
   
           // Create the client URI:
           Properties clientParms = new Properties();
  -        clientParms.put("tcp.nodelay", enableTcpNoDelay ? "true" : "false");
  +        clientParms.put("tcp.nodelay", TCPNoDelay ? "true" : "false");
           connectURI = new URI("async",
                                null,
                                InetAddress.getByName(serverBindAddress).getHostName(),
  @@ -168,7 +179,7 @@
   
                   if (channel == null) return;
   
  -                channel.socket().setTcpNoDelay(enableTcpNoDelay);
  +                channel.socket().setTcpNoDelay(TCPNoDelay);
                   acceptorListener.accept(channel);
   
                   selectorManager.addInterestOps(selectionKey, SelectionKey.OP_ACCEPT);
  
  
  
  1.11      +23 -3     incubator-geronimo/modules/network/src/java/org/apache/geronimo/network/protocol/SocketProtocol.java
  
  Index: SocketProtocol.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/network/src/java/org/apache/geronimo/network/protocol/SocketProtocol.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- SocketProtocol.java	25 Apr 2004 02:03:37 -0000	1.10
  +++ SocketProtocol.java	1 May 2004 17:23:55 -0000	1.11
  @@ -50,6 +50,8 @@
       private SocketAddress socketInterface;
   
       private long timeout;
  +    private boolean TCPNoDelay;
  +    private boolean reuseAddress = true;
       private Mutex sendMutex;
       private SelectorManager selectorManager;
       private SelectionKey selectionKey;
  @@ -129,6 +131,24 @@
           this.timeout = timeout;
       }
   
  +    public boolean isTCPNoDelay() {
  +        return TCPNoDelay;
  +    }
  +
  +    public void setTCPNoDelay(boolean TCPNoDelay) {
  +        if (state == STARTED) throw new IllegalStateException("Protocol already started");
  +        this.TCPNoDelay = TCPNoDelay;
  +    }
  +
  +    public boolean isReuseAddress() {
  +        if (state == STARTED) throw new IllegalStateException("Protocol already started");
  +        return reuseAddress;
  +    }
  +
  +    public void setReuseAddress(boolean reuseAddress) {
  +        this.reuseAddress = reuseAddress;
  +    }
  +
       public SelectorManager getSelectorManager() {
           return selectorManager;
       }
  @@ -170,9 +190,9 @@
               try {
                   socketChannel = SocketChannel.open();
                   socketChannel.configureBlocking(true);
  +                socketChannel.socket().setReuseAddress(reuseAddress);
  +                socketChannel.socket().setTcpNoDelay(TCPNoDelay);
                   if (socketInterface != null) socketChannel.socket().bind(socketInterface);
  -                socketChannel.socket().setReuseAddress(true);
  -                socketChannel.socket().setTcpNoDelay(true);
                   socketChannel.connect(address);
               } catch (SocketException e) {
                   state = STOPPED;