DatagramSocket setSoTimeout(int) in Java

setSoTimeout(int): This method is available in the java.net.DatagramSocket class of Java.

Syntax:

void java.net.DatagramSocket.setSoTimeout(int timeout) throws SocketException

This method takes one argument. This method enables/disable SO_TIMEOUT with the specified timeout, in milliseconds.

Note:

1. With this option set to a positive timeout value, a call to receive() for this DatagramSocketwill block for only this amount of time.

2. If the timeout expires, a java.net.SocketTimeoutException is raised, though the DatagramSocket is still valid.

3. A timeout of zero is interpreted as an infinite timeout. The option must be enabled prior to entering the blocking operation to have an effect.

Parameters: One parameter is required for this method.

timeout: the specified timeout in milliseconds.

Throws:

1. SocketException - if there is an error in the underlying protocol, such as an UDP error.

2. IllegalArgumentException - if the timeout is negative.

Approach 1: When no exception

Java

package com.DatagramSocket;

import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

public class DatagramSocketsetSoTimeout {
    public static void main(String[] args)
throws UnknownHostException, SocketException {

        int port = 100;
        InetAddress laddr = InetAddress.getLocalHost();
        DatagramSocket datagramSocket =
new DatagramSocket(port, laddr);

        int timeout = 100;
        datagramSocket.setSoTimeout(timeout);
        System.out.println("Successfully setSoTimeout");
    }
}

Output:

Successfully setSoTimeout


Approach 2: IllegalArgumentException 

Java

package com.DatagramSocket;

import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

public class DatagramSocketsetSoTimeout {
    public static void main(String[] args)
throws UnknownHostException, SocketException {

        int port = 100;
        InetAddress laddr = InetAddress.getLocalHost();
        DatagramSocket datagramSocket =
new DatagramSocket(port, laddr);

        int timeout = -100;
        datagramSocket.setSoTimeout(timeout);
        System.out.println("Successfully setSoTimeout");
    }
}

Output:

Exception in thread "main" java.lang.IllegalArgumentException: timeout < 0 at java.base/sun.nio.ch.DatagramSocketAdaptor.setSoTimeout(DatagramSocketAdaptor.java:294) at java.base/java.net.DatagramSocket.setSoTimeout(DatagramSocket.java:624) at com.DatagramSocket.DatagramSocketsetSoTimeout.main(DatagramSocketsetSoTimeout.java:16)


Some other methods of DatagramSocket class

DatagramSocket(): This method constructs a datagram socket and binds it to any available port on the local host machine. 

DatagramSocket(int):  This method constructs a datagram socket and binds it to the specified port on the local host machine.

DatagramSocket(SocketAddress): This method creates a datagram socket, bound to the specified local socket address.

DatagramSocket(int, InetAddress): This method creates a datagram socket, bound to the specified local address.

bind(SocketAddress): This method binds this DatagramSocket to a specific address and port.

connect(SocketAddress): This method connects this socket to a remote socket address (IP address + port number).

connect(InetAddress, int): This method connects the socket to a remote address for this socket. When a socket is connected to a remote address, packets may only be sent to or received from that address.

disconnect(): This method disconnects the socket.

getBroadcast(): This method tests if SO_BROADCAST is enabled.

getChannel(): This method returns the unique java.nio.channels.DatagramChannel object associated with this datagram socket, if any.

getInetAddress(): This method returns the address to which this socket is connected. Returns null if the socket is not connected.

getLocalAddress(): This method gets the local address to which the socket is bound.

getLocalPort(): This method returns the port number on the local host to which this socket is bound.

getLocalSocketAddress(): This method returns the address of the endpoint this socket is bound to.

getOption(SocketOption): This method returns the value of a socket option.

getPort(): This method returns the port number to which this socket is connected.

getReceiveBufferSize(): This method gets the value of the SO_RCVBUF option for this DatagramSocket, which is the buffer size used by the platform for input on this DatagramSocket.

getRemoteSocketAddress(): This method returns the address of the endpoint this socket is connected to, or null if it is unconnected.

getReuseAddress(): This method tests if SO_REUSEADDR is enabled.

getSendBufferSize(): This method gets the value of the SO_SNDBUF option for this DatagramSocket, which is the buffer size used by the platform for output on this DatagramSocket.

getSoTimeout(): This method retrieves the setting for SO_TIMEOUT. 0 returns implies that the option is disabled (i.e., timeout of infinity).

getTrafficClass(): This method gets the traffic class or type-of-service in the IP datagram header for packets sent from this DatagramSocket.

isBound(): This method returns the binding state of the socket.

isClosed(): This method returns whether the socket is closed or not.

isConnected(): This method returns the connection state of the socket.

receive(DatagramPacket): This method receives a datagram packet from this socket.

send(DatagramPacket): This method sends a datagram packet from this socket.

setBroadcast(boolean): This method enables/disables SO_BROADCAST.

DatagramSocket.setDatagramSocketImplFactory(DatagramSocketImplFactory): This method sets the datagram socket implementation factory for the application.

setOption(SocketOption, String): This method sets the value of a socket option.

setReceiveBufferSize(int):  This method sets the SO_RCVBUF option to the specified value for this DatagramSocket. 

setReuseAddress(boolean): This method enables/disables the SO_REUSEADDR socket option.

setSendBufferSize(int): This method sets the SO_SNDBUF option to the specified value for this DatagramSocket.

setSoTimeout(int): This method enables/disable SO_TIMEOUT with the specified timeout, in milliseconds.

setTrafficClass(int):  This method sets the traffic class or type-of-service octet in the IP datagram header for datagrams sent from this DatagramSocket.

supportedOptions(): This method returns a set of the socket options supported by this socket. This method will continue to return the set of options even after the socket has been closed.

No comments:

Post a Comment