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