Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Java Operators

Java Control Statements

Object Oriented Programming

Java Built-in Classes

Java File Handling

Java Error & Exceptions

Java Multithreading

Java Synchronization

Java Networking

Java Collections

Java Interfaces

Java Data Structures

Java Collections Algorithms

Advanced Java

Java Miscellaneous

Java APIs & Frameworks

Java Class References

Java Useful Resources

Java - Socket setReuseAddress() Method



Description

The Java Socket setReuseAddress(boolean on) enables/disables the SO_REUSEADDR socket option. If SO_REUSEADDR is enabled prior to binding the socket using bind(SocketAddress) method, then we can bind the socket even though a previous connection is timedout. Initially SO_REUSEADDR is disabled when a socket is created.

Declaration

Following is the declaration for java.net.Socket.setReuseAddress(boolean on) method.

public void setReuseAddress(boolean on) throws SocketException

Parameters

on − whether to enable or disable the socket option.

Return Value

N/A

Exception

SocketException − if an error occurs enabling or disabling the SO_REUSEADDR socket option, or the socket is closed.

Example 1

The following example shows the usage of Java Socket setReuseAddress() method to set the status of SO_REUSEADDR flag of socket instance. As first step, we've created a Socket instance using no argument constructor. Then in order to create a SocketAddress object, we've initialized an InetAddress instance of localhost address. Using InetSocketAddress object, we've created a SocketAddress object and then using bind() method, we bind the address to the socket. Once done, we're enabling the SO_REUSEADDR flag using setReuseAddress() and then we're printing the SO_REUSEADDR flag using getReuseAddress() method, local port and inetaddress as shown. In the end, we closed the socket using close() method.

package com.tutorialspoint;

import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;

public class SocketDemo {
   public static void main(String[] args) throws IOException {
      Socket socket = new Socket();  
      InetAddress inetAddress=InetAddress.getByName("localhost");  
      SocketAddress socketAddress=new InetSocketAddress(inetAddress, 6066);  
      socket.bind(socketAddress); 
      socket.setReuseAddress(true);  
      System.out.println("Is SO_REUSEADDR: "+socket.getReuseAddress()); 
      System.out.println("Port number: "+socket.getLocalPort()); 
      System.out.println("Inet Address: "+socket.getInetAddress()); 
      socket.close();
   }
}

Output

Let us compile and run the above program, this will produce the following result −

Is SO_REUSEADDR: true
Port number: 6066
Inet Address: null

Example 2

The following example shows the usage of Java Socket setReuseAddress() method to set the status of SO_REUSEADDR flag of socket instance. As first step, we've created a Socket instance using no argument constructor. Now, we're printing the SO_REUSEADDR flag using getReuseAddress() method. Then we're setting the SO_REUSEADDR flag as true using setReuseAddress() method and print the same. In the end, we closed the socket using close() method.

package com.tutorialspoint;

import java.io.IOException;
import java.net.Socket;

public class SocketDemo {
   public static void main(String[] args) throws IOException {
      Socket socket = new Socket();  

      System.out.println("Is SO_REUSEADDR: "+socket.getReuseAddress());
      socket.setReuseAddress(true);  
      System.out.println("Is SO_REUSEADDR: "+socket.getReuseAddress());
      socket.close();
   }
}

Output

Let us compile and run the above program, this will produce the following result −

Is SO_REUSEADDR: false
Is SO_REUSEADDR: true

Example 3

The following example shows the usage of Java Socket setReuseAddress() method to set the status of SO_REUSEADDR flag of socket instance, if socket is already closed. As first step, we've created a Socket instance using no argument constructor. Using socket.close(), we're closing the socket. Now, we're trying to enable the SO_REUSEADDR flag using setReuseAddress() method and then printing the SO_REUSEADDR flag using getReuseAddress() method. In the end, we closed the socket using close() method. As socket is already closed, setReuseAddress() method call throws an exception as shown below −

package com.tutorialspoint;

import java.io.IOException;
import java.net.Socket;

public class SocketDemo {
   public static void main(String[] args) throws IOException {
      Socket socket = new Socket();  
      socket.close();	  
      socket.setReuseAddress(true);  
      System.out.println("Is SO_REUSEADDR: "+socket.getReuseAddress());
      socket.setReuseAddress(false);  
      System.out.println("Is SO_REUSEADDR: "+socket.getReuseAddress());
      socket.close();
   }
}

Output

Let us compile and run the above program, this will produce the following result −

Exception in thread "main" java.net.SocketException: Socket is closed
	at java.base/java.net.Socket.setReuseAddress(Socket.java:1465)
	at com.tutorialspoint.SocketDemo.main(SocketDemo.java:10)
java-socket.htm
Advertisements