Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels) Summary: [Inherited Constants](https://developer.android.com/reference/java/net/DatagramSocketImpl#inhconstants) \| [Fields](https://developer.android.com/reference/java/net/DatagramSocketImpl#lfields) \| [Ctors](https://developer.android.com/reference/java/net/DatagramSocketImpl#pubctors) \| [Protected Methods](https://developer.android.com/reference/java/net/DatagramSocketImpl#promethods) \| [Inherited Methods](https://developer.android.com/reference/java/net/DatagramSocketImpl#inhmethods)

# DatagramSocketImpl


`
public


abstract
class
DatagramSocketImpl
`


`

extends https://developer.android.com/reference/java/lang/Object


`

`


implements

https://developer.android.com/reference/java/net/SocketOptions


`

|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object) ||
| ↳ | java.net.DatagramSocketImpl |

<br />

*** ** * ** ***

Abstract datagram and multicast socket implementation base class.

## Summary

| ### Inherited constants |
|---|
| From interface `https://developer.android.com/reference/java/net/SocketOptions` |---|---| | `int` | `https://developer.android.com/reference/java/net/SocketOptions#IP_MULTICAST_IF` Set which outgoing interface on which to send multicast packets. | | `int` | `https://developer.android.com/reference/java/net/SocketOptions#IP_MULTICAST_IF2` Same as above. | | `int` | `https://developer.android.com/reference/java/net/SocketOptions#IP_MULTICAST_LOOP` This option enables or disables local loopback of multicast datagrams. | | `int` | `https://developer.android.com/reference/java/net/SocketOptions#IP_TOS` This option sets the type-of-service or traffic class field in the IP header for a TCP or UDP socket. | | `int` | `https://developer.android.com/reference/java/net/SocketOptions#SO_BINDADDR` Fetch the local address binding of a socket (this option cannot be "set" only "gotten", since sockets are bound at creation time, and so the locally bound address cannot be changed). | | `int` | `https://developer.android.com/reference/java/net/SocketOptions#SO_BROADCAST` Sets SO_BROADCAST for a socket. | | `int` | `https://developer.android.com/reference/java/net/SocketOptions#SO_KEEPALIVE` When the keepalive option is set for a TCP socket and no data has been exchanged across the socket in either direction for 2 hours (NOTE: the actual value is implementation dependent), TCP automatically sends a keepalive probe to the peer. | | `int` | `https://developer.android.com/reference/java/net/SocketOptions#SO_LINGER` Specify a linger-on-close timeout. | | `int` | `https://developer.android.com/reference/java/net/SocketOptions#SO_OOBINLINE` When the OOBINLINE option is set, any TCP urgent data received on the socket will be received through the socket input stream. | | `int` | `https://developer.android.com/reference/java/net/SocketOptions#SO_RCVBUF` Set a hint the size of the underlying buffers used by the platform for incoming network I/O. | | `int` | `https://developer.android.com/reference/java/net/SocketOptions#SO_REUSEADDR` Sets SO_REUSEADDR for a socket. | | `int` | `https://developer.android.com/reference/java/net/SocketOptions#SO_REUSEPORT` Sets SO_REUSEPORT for a socket. | | `int` | `https://developer.android.com/reference/java/net/SocketOptions#SO_SNDBUF` Set a hint the size of the underlying buffers used by the platform for outgoing network I/O. | | `int` | `https://developer.android.com/reference/java/net/SocketOptions#SO_TIMEOUT` Set a timeout on blocking Socket operations: ``` ServerSocket.accept(); SocketInputStream.read(); DatagramSocket.receive(); ``` The option must be set prior to entering a blocking operation to take effect. | | `int` | `https://developer.android.com/reference/java/net/SocketOptions#TCP_NODELAY` Disable Nagle's algorithm for this connection. | |

| ### Fields ||
|---|---|
| ` protected https://developer.android.com/reference/java/io/FileDescriptor` | `https://developer.android.com/reference/java/net/DatagramSocketImpl#fd` The file descriptor object. |
| ` protected int` | `https://developer.android.com/reference/java/net/DatagramSocketImpl#localPort` The local port number. |

| ### Public constructors ||
|---|---|
| ` https://developer.android.com/reference/java/net/DatagramSocketImpl#DatagramSocketImpl()() ` |

| ### Protected methods ||
|---|---|
| ` abstract void` | ` https://developer.android.com/reference/java/net/DatagramSocketImpl#bind(int,%20java.net.InetAddress)(int lport, https://developer.android.com/reference/java/net/InetAddress laddr) ` Binds a datagram socket to a local port and address. |
| ` abstract void` | ` https://developer.android.com/reference/java/net/DatagramSocketImpl#close()() ` Close the socket. |
| ` void` | ` https://developer.android.com/reference/java/net/DatagramSocketImpl#connect(java.net.InetAddress,%20int)(https://developer.android.com/reference/java/net/InetAddress address, int port) ` Connects a datagram socket to a remote destination. |
| ` abstract void` | ` https://developer.android.com/reference/java/net/DatagramSocketImpl#create()() ` Creates a datagram socket. |
| ` void` | ` https://developer.android.com/reference/java/net/DatagramSocketImpl#disconnect()() ` Disconnects a datagram socket from its remote destination. |
| ` https://developer.android.com/reference/java/io/FileDescriptor` | ` https://developer.android.com/reference/java/net/DatagramSocketImpl#getFileDescriptor()() ` Gets the datagram socket file descriptor. |
| ` int` | ` https://developer.android.com/reference/java/net/DatagramSocketImpl#getLocalPort()() ` Gets the local port. |
| ` <T> T` | ` https://developer.android.com/reference/java/net/DatagramSocketImpl#getOption(java.net.SocketOption<T>)(https://developer.android.com/reference/java/net/SocketOption<T> name) ` Called to get a socket option. |
| ` abstract byte` | ` https://developer.android.com/reference/java/net/DatagramSocketImpl#getTTL()() ` *This method was deprecated in API level 15. use getTimeToLive instead.* |
| ` abstract int` | ` https://developer.android.com/reference/java/net/DatagramSocketImpl#getTimeToLive()() ` Retrieve the TTL (time-to-live) option. |
| ` abstract void` | ` https://developer.android.com/reference/java/net/DatagramSocketImpl#join(java.net.InetAddress)(https://developer.android.com/reference/java/net/InetAddress inetaddr) ` Join the multicast group. |
| ` abstract void` | ` https://developer.android.com/reference/java/net/DatagramSocketImpl#joinGroup(java.net.SocketAddress,%20java.net.NetworkInterface)(https://developer.android.com/reference/java/net/SocketAddress mcastaddr, https://developer.android.com/reference/java/net/NetworkInterface netIf) ` Join the multicast group. |
| ` abstract void` | ` https://developer.android.com/reference/java/net/DatagramSocketImpl#leave(java.net.InetAddress)(https://developer.android.com/reference/java/net/InetAddress inetaddr) ` Leave the multicast group. |
| ` abstract void` | ` https://developer.android.com/reference/java/net/DatagramSocketImpl#leaveGroup(java.net.SocketAddress,%20java.net.NetworkInterface)(https://developer.android.com/reference/java/net/SocketAddress mcastaddr, https://developer.android.com/reference/java/net/NetworkInterface netIf) ` Leave the multicast group. |
| ` abstract int` | ` https://developer.android.com/reference/java/net/DatagramSocketImpl#peek(java.net.InetAddress)(https://developer.android.com/reference/java/net/InetAddress i) ` Peek at the packet to see who it is from. |
| ` abstract int` | ` https://developer.android.com/reference/java/net/DatagramSocketImpl#peekData(java.net.DatagramPacket)(https://developer.android.com/reference/java/net/DatagramPacket p) ` Peek at the packet to see who it is from. |
| ` abstract void` | ` https://developer.android.com/reference/java/net/DatagramSocketImpl#receive(java.net.DatagramPacket)(https://developer.android.com/reference/java/net/DatagramPacket p) ` Receive the datagram packet. |
| ` abstract void` | ` https://developer.android.com/reference/java/net/DatagramSocketImpl#send(java.net.DatagramPacket)(https://developer.android.com/reference/java/net/DatagramPacket p) ` Sends a datagram packet. |
| ` <T> void` | ` https://developer.android.com/reference/java/net/DatagramSocketImpl#setOption(java.net.SocketOption<T>,%20T)(https://developer.android.com/reference/java/net/SocketOption<T> name, T value) ` Called to set a socket option. |
| ` abstract void` | ` https://developer.android.com/reference/java/net/DatagramSocketImpl#setTTL(byte)(byte ttl) ` *This method was deprecated in API level 15. use setTimeToLive instead.* |
| ` abstract void` | ` https://developer.android.com/reference/java/net/DatagramSocketImpl#setTimeToLive(int)(int ttl) ` Set the TTL (time-to-live) option. |
| ` https://developer.android.com/reference/java/util/Set<https://developer.android.com/reference/java/net/SocketOption<?>>` | ` https://developer.android.com/reference/java/net/DatagramSocketImpl#supportedOptions()() ` Returns a set of SocketOptions supported by this impl and by this impl's socket (DatagramSocket or MulticastSocket) |

| ### Inherited methods |
|---|---|
| From class ` https://developer.android.com/reference/java/lang/Object ` |---|---| | ` https://developer.android.com/reference/java/lang/Object` | ` https://developer.android.com/reference/java/lang/Object#clone()() ` Creates and returns a copy of this object. | | ` boolean` | ` https://developer.android.com/reference/java/lang/Object#equals(java.lang.Object)(https://developer.android.com/reference/java/lang/Object obj) ` Indicates whether some other object is "equal to" this one. | | ` void` | ` https://developer.android.com/reference/java/lang/Object#finalize()() ` Called by the garbage collector on an object when garbage collection determines that there are no more references to the object. | | ` final https://developer.android.com/reference/java/lang/Class<?>` | ` https://developer.android.com/reference/java/lang/Object#getClass()() ` Returns the runtime class of this `Object`. | | ` int` | ` https://developer.android.com/reference/java/lang/Object#hashCode()() ` Returns a hash code value for the object. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#notify()() ` Wakes up a single thread that is waiting on this object's monitor. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#notifyAll()() ` Wakes up all threads that are waiting on this object's monitor. | | ` https://developer.android.com/reference/java/lang/String` | ` https://developer.android.com/reference/java/lang/Object#toString()() ` Returns a string representation of the object. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#wait(long,%20int)(long timeoutMillis, int nanos) ` Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#wait(long)(long timeoutMillis) ` Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#wait()() ` Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*. | ||
| From interface ` https://developer.android.com/reference/java/net/SocketOptions ` |---|---| | ` abstract https://developer.android.com/reference/java/lang/Object` | ` https://developer.android.com/reference/java/net/SocketOptions#getOption(int)(int optID) ` Fetch the value of an option. | | ` abstract void` | ` https://developer.android.com/reference/java/net/SocketOptions#setOption(int,%20java.lang.Object)(int optID, https://developer.android.com/reference/java/lang/Object value) ` Enable/disable the option specified by *optID*. | ||

## Fields

### fd

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
protected FileDescriptor fd
```

The file descriptor object.

<br />

### localPort

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
protected int localPort
```

The local port number.

<br />

## Public constructors

### DatagramSocketImpl

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public DatagramSocketImpl ()
```

<br />

<br />

## Protected methods

### bind

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
protected abstract void bind (int lport, 
                InetAddress laddr)
```

Binds a datagram socket to a local port and address.

<br />

| Parameters ||
|---|---|
| `lport` | `int`: the local port <br /> |
| `laddr` | `InetAddress`: the local address <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/net/SocketException` | if there is an error in the underlying protocol, such as a TCP error. |

### close

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
protected abstract void close ()
```

Close the socket.

<br />

### connect

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
protected void connect (InetAddress address, 
                int port)
```

Connects a datagram socket to a remote destination. This associates the remote
address with the local socket so that datagrams may only be sent to this destination
and received from this destination. This may be overridden to call a native
system connect.

If the remote destination to which the socket is connected does not
exist, or is otherwise unreachable, and if an ICMP destination unreachable
packet has been received for that address, then a subsequent call to
send or receive may throw a PortUnreachableException.
Note, there is no guarantee that the exception will be thrown.

<br />

| Parameters ||
|---|---|
| `address` | `InetAddress`: the remote InetAddress to connect to <br /> |
| `port` | `int`: the remote port number <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/net/SocketException` | may be thrown if the socket cannot be connected to the remote destination |

### create

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
protected abstract void create ()
```

Creates a datagram socket.

<br />

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/net/SocketException` | if there is an error in the underlying protocol, such as a TCP error. |

### disconnect

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
protected void disconnect ()
```

Disconnects a datagram socket from its remote destination.

<br />

### getFileDescriptor

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
protected FileDescriptor getFileDescriptor ()
```

Gets the datagram socket file descriptor.

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/io/FileDescriptor` | a `FileDescriptor` object representing the datagram socket file descriptor <br /> |

### getLocalPort

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
protected int getLocalPort ()
```

Gets the local port.

<br />

| Returns ||
|---|---|
| `int` | an `int` representing the local port value <br /> |

### getOption

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
protected T getOption (SocketOption<T> name)
```

Called to get a socket option.

<br />

| Parameters ||
|---|---|
| `name` | `SocketOption`: The socket option <br /> |

| Returns ||
|---|---|
| `T` | the socket option <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` | if an I/O problem occurs while attempting to set the option |
| `https://developer.android.com/reference/java/lang/NullPointerException` | if name is `null` |
| `https://developer.android.com/reference/java/lang/UnsupportedOperationException` | if the DatagramSocketImpl does not support the option |

### getTTL

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
15](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
protected abstract byte getTTL ()
```


**This method was deprecated
in API level 15.**   

use getTimeToLive instead.

Retrieve the TTL (time-to-live) option.

<br />

| Returns ||
|---|---|
| `byte` | a byte representing the TTL value <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` | if an I/O exception occurs while retrieving the time-to-live option |

**See also:**

- `https://developer.android.com/reference/java/net/DatagramSocketImpl#setTTL(byte)`

### getTimeToLive

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
protected abstract int getTimeToLive ()
```

Retrieve the TTL (time-to-live) option.

<br />

| Returns ||
|---|---|
| `int` | an `int` representing the time-to-live value <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` | if an I/O exception occurs while retrieving the time-to-live option |

**See also:**

- `https://developer.android.com/reference/java/net/DatagramSocketImpl#setTimeToLive(int)`

### join

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
protected abstract void join (InetAddress inetaddr)
```

Join the multicast group.

<br />

| Parameters ||
|---|---|
| `inetaddr` | `InetAddress`: multicast address to join. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` | if an I/O exception occurs while joining the multicast group. |

### joinGroup

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
protected abstract void joinGroup (SocketAddress mcastaddr, 
                NetworkInterface netIf)
```

Join the multicast group.

<br />

| Parameters ||
|---|---|
| `mcastaddr` | `SocketAddress`: address to join. <br /> |
| `netIf` | `NetworkInterface`: specifies the local interface to receive multicast datagram packets <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` | if an I/O exception occurs while joining the multicast group |

### leave

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
protected abstract void leave (InetAddress inetaddr)
```

Leave the multicast group.

<br />

| Parameters ||
|---|---|
| `inetaddr` | `InetAddress`: multicast address to leave. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` | if an I/O exception occurs while leaving the multicast group. |

### leaveGroup

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
protected abstract void leaveGroup (SocketAddress mcastaddr, 
                NetworkInterface netIf)
```

Leave the multicast group.

<br />

| Parameters ||
|---|---|
| `mcastaddr` | `SocketAddress`: address to leave. <br /> |
| `netIf` | `NetworkInterface`: specified the local interface to leave the group at <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` | if an I/O exception occurs while leaving the multicast group |

### peek

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
protected abstract int peek (InetAddress i)
```

Peek at the packet to see who it is from. Updates the specified `InetAddress`
to the address which the packet came from.

<br />

| Parameters ||
|---|---|
| `i` | `InetAddress`: an InetAddress object <br /> |

| Returns ||
|---|---|
| `int` | the port number which the packet came from. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` | if an I/O exception occurs |
| `https://developer.android.com/reference/java/net/PortUnreachableException` | may be thrown if the socket is connected to a currently unreachable destination. Note, there is no guarantee that the exception will be thrown. |

### peekData

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
protected abstract int peekData (DatagramPacket p)
```

Peek at the packet to see who it is from. The data is copied into the specified
`DatagramPacket`. The data is returned,
but not consumed, so that a subsequent peekData/receive operation
will see the same data.

<br />

| Parameters ||
|---|---|
| `p` | `DatagramPacket`: the Packet Received. <br /> |

| Returns ||
|---|---|
| `int` | the port number which the packet came from. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` | if an I/O exception occurs |
| `https://developer.android.com/reference/java/net/PortUnreachableException` | may be thrown if the socket is connected to a currently unreachable destination. Note, there is no guarantee that the exception will be thrown. |

### receive

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
protected abstract void receive (DatagramPacket p)
```

Receive the datagram packet.

<br />

| Parameters ||
|---|---|
| `p` | `DatagramPacket`: the Packet Received. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` | if an I/O exception occurs while receiving the datagram packet. |
| `https://developer.android.com/reference/java/net/PortUnreachableException` | may be thrown if the socket is connected to a currently unreachable destination. Note, there is no guarantee that the exception will be thrown. |

### send

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
protected abstract void send (DatagramPacket p)
```

Sends a datagram packet. The packet contains the data and the
destination address to send the packet to.

<br />

| Parameters ||
|---|---|
| `p` | `DatagramPacket`: the packet to be sent. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` | if an I/O exception occurs while sending the datagram packet. |
| `https://developer.android.com/reference/java/net/PortUnreachableException` | may be thrown if the socket is connected to a currently unreachable destination. Note, there is no guarantee that the exception will be thrown. |

### setOption

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
protected void setOption (SocketOption<T> name, 
                T value)
```

Called to set a socket option.

<br />

| Parameters ||
|---|---|
| `name` | `SocketOption`: The socket option <br /> |
| `value` | `T`: The value of the socket option. A value of `null` may be valid for some options. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` | if an I/O problem occurs while attempting to set the option |
| `https://developer.android.com/reference/java/lang/NullPointerException` | if name is `null` |
| `https://developer.android.com/reference/java/lang/UnsupportedOperationException` | if the DatagramSocketImpl does not support the option |

### setTTL

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
15](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
protected abstract void setTTL (byte ttl)
```


**This method was deprecated
in API level 15.**   

use setTimeToLive instead.

Set the TTL (time-to-live) option.

<br />

| Parameters ||
|---|---|
| `ttl` | `byte`: a byte specifying the TTL value <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` | if an I/O exception occurs while setting the time-to-live option. |

**See also:**

- `https://developer.android.com/reference/java/net/DatagramSocketImpl#getTTL()`

### setTimeToLive

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
protected abstract void setTimeToLive (int ttl)
```

Set the TTL (time-to-live) option.

<br />

| Parameters ||
|---|---|
| `ttl` | `int`: an `int` specifying the time-to-live value <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` | if an I/O exception occurs while setting the time-to-live option. |

**See also:**

- `https://developer.android.com/reference/java/net/DatagramSocketImpl#getTimeToLive()`

### supportedOptions

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
protected Set<SocketOption<?>> supportedOptions ()
```

Returns a set of SocketOptions supported by this impl
and by this impl's socket (DatagramSocket or MulticastSocket)

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/util/Set<https://developer.android.com/reference/java/net/SocketOption<?>>` | a Set of SocketOptions <br /> |