# Struct bitflags::__core::net::UdpSocket [−] [src]

    pub struct UdpSocket(_);

1.0.0

A User Datagram Protocol socket.

This is an implementation of a bound UDP socket. This supports both IPv4 and IPv6 addresses, and there is no corresponding notion of a server because UDP is a datagram protocol.

# Examples

    use std::net::UdpSocket;

    {
        let mut socket = try!(UdpSocket::bind("127.0.0.1:34254"));

        // read from the socket
        let mut buf = [0; 10];
        let (amt, src) = try!(socket.recv_from(&mut buf));

        // send a reply to the socket we received data from
        let buf = &mut buf[..amt];
        buf.reverse();
        try!(socket.send_to(buf, &src));
    } // the socket is closed here

## Methods

### `impl UdpSocket`

#### `fn bind<A>(addr: A) -> Result<UdpSocket, Error> where A: ToSocketAddrs`

Creates a UDP socket from the given address.

The address type can be any implementor of `ToSocketAddr` trait. See its documentation for concrete examples.

#### `fn recv_from(&self, buf: &mut [u8]) -> Result<(usize, SocketAddr), Error>`

Receives data from the socket. On success, returns the number of bytes read and the address from whence the data came.

#### `fn send_to<A>(&self, buf: &[u8], addr: A) -> Result<usize, Error> where A: ToSocketAddrs`

Sends data on the socket to the given address. On success, returns the number of bytes written.

Address type can be any implementor of `ToSocketAddrs` trait. See its documentation for concrete examples.

#### `fn local_addr(&self) -> Result<SocketAddr, Error>`

Returns the socket address that this socket was created from.

#### `fn try_clone(&self) -> Result<UdpSocket, Error>`

Creates a new independently owned handle to the underlying socket.

The returned `UdpSocket` is a reference to the same socket that this object references. Both handles will read and write the same port, and options set on one socket will be propagated to the other.

#### `fn set_read_timeout(&self, dur: Option<Duration>) -> Result<(), Error>`1.4.0

Sets the read timeout to the timeout specified.

If the value specified is `None`, then `read` calls will block indefinitely. It is an error to pass the zero `Duration` to this method.

# Note

Platforms may return a different error code whenever a read times out as a result of setting this option. For example Unix typically returns an error of the kind `WouldBlock`, but Windows may return `TimedOut`.

#### `fn set_write_timeout(&self, dur: Option<Duration>) -> Result<(), Error>`1.4.0

Sets the write timeout to the timeout specified.

If the value specified is `None`, then `write` calls will block indefinitely. It is an error to pass the zero `Duration` to this method.

# Note

Platforms may return a different error code whenever a write times out as a result of setting this option. For example Unix typically returns an error of the kind `WouldBlock`, but Windows may return `TimedOut`.

#### `fn read_timeout(&self) -> Result<Option<Duration>, Error>`1.4.0

Returns the read timeout of this socket.

If the timeout is `None`, then `read` calls will block indefinitely.

#### `fn write_timeout(&self) -> Result<Option<Duration>, Error>`1.4.0

Returns the write timeout of this socket.

If the timeout is `None`, then `write` calls will block indefinitely.

#### `fn set_broadcast(&self, broadcast: bool) -> Result<(), Error>`1.9.0

Sets the value of the `SO_BROADCAST` option for this socket.

When enabled, this socket is allowed to send packets to a broadcast address.

#### `fn broadcast(&self) -> Result<bool, Error>`1.9.0

Gets the value of the `SO_BROADCAST` option for this socket.

For more information about this option, see `set_broadcast`.

#### `fn set_multicast_loop_v4(&self, multicast_loop_v4: bool) -> Result<(), Error>`1.9.0

Sets the value of the `IP_MULTICAST_LOOP` option for this socket.

If enabled, multicast packets will be looped back to the local socket. Note that this may not have any affect on IPv6 sockets.

#### `fn multicast_loop_v4(&self) -> Result<bool, Error>`1.9.0

Gets the value of the `IP_MULTICAST_LOOP` option for this socket.

For more information about this option, see `set_multicast_loop_v4`.

#### `fn set_multicast_ttl_v4(&self, multicast_ttl_v4: u32) -> Result<(), Error>`1.9.0

Sets the value of the `IP_MULTICAST_TTL` option for this socket.

Indicates the time-to-live value of outgoing multicast packets for this socket. The default value is 1 which means that multicast packets don't leave the local network unless explicitly requested.

Note that this may not have any affect on IPv6 sockets.

#### `fn multicast_ttl_v4(&self) -> Result<u32, Error>`1.9.0

Gets the value of the `IP_MULTICAST_TTL` option for this socket.

For more information about this option, see `set_multicast_ttl_v4`.

#### `fn set_multicast_loop_v6(&self, multicast_loop_v6: bool) -> Result<(), Error>`1.9.0

Sets the value of the `IPV6_MULTICAST_LOOP` option for this socket.

Controls whether this socket sees the multicast packets it sends itself. Note that this may not have any affect on IPv4 sockets.

#### `fn multicast_loop_v6(&self) -> Result<bool, Error>`1.9.0

Gets the value of the `IPV6_MULTICAST_LOOP` option for this socket.

For more information about this option, see `set_multicast_loop_v6`.

#### `fn set_ttl(&self, ttl: u32) -> Result<(), Error>`1.9.0

Sets the value for the `IP_TTL` option on this socket.

This value sets the time-to-live field that is used in every packet sent from this socket.

#### `fn ttl(&self) -> Result<u32, Error>`1.9.0

Gets the value of the `IP_TTL` option for this socket.

For more information about this option, see `set_ttl`.

#### `fn join_multicast_v4(&self, multiaddr: &Ipv4Addr, interface: &Ipv4Addr) -> Result<(), Error>`1.9.0

Executes an operation of the `IP_ADD_MEMBERSHIP` type.

This function specifies a new multicast group for this socket to join. The address must be a valid multicast address, and `interface` is the address of the local interface with which the system should join the multicast group. If it's equal to `INADDR_ANY` then an appropriate interface is chosen by the system.

#### `fn join_multicast_v6(&self, multiaddr: &Ipv6Addr, interface: u32) -> Result<(), Error>`1.9.0

Executes an operation of the `IPV6_ADD_MEMBERSHIP` type.

This function specifies a new multicast group for this socket to join. The address must be a valid multicast address, and `interface` is the index of the interface to join/leave (or 0 to indicate any interface).

#### `fn leave_multicast_v4(&self, multiaddr: &Ipv4Addr, interface: &Ipv4Addr) -> Result<(), Error>`1.9.0

Executes an operation of the `IP_DROP_MEMBERSHIP` type.

For more information about this option, see `join_multicast_v4`.

#### `fn leave_multicast_v6(&self, multiaddr: &Ipv6Addr, interface: u32) -> Result<(), Error>`1.9.0

Executes an operation of the `IPV6_DROP_MEMBERSHIP` type.

For more information about this option, see `join_multicast_v6`.

#### `fn take_error(&self) -> Result<Option<Error>, Error>`1.9.0

Get the value of the `SO_ERROR` option on this socket.

This will retrieve the stored error in the underlying socket, clearing the field in the process. This can be useful for checking errors between calls.

#### `fn connect<A>(&self, addr: A) -> Result<(), Error> where A: ToSocketAddrs` 1.9.0

Connects this UDP socket to a remote address, allowing the `send` and `recv` syscalls to be used to send data and also applies filters to only receive data from the specified address.

#### `fn send(&self, buf: &[u8]) -> Result<usize, Error>`1.9.0

Sends data on the socket to the remote address to which it is connected.

The `connect` method will connect this socket to a remote address. This method will fail if the socket is not connected.

#### `fn recv(&self, buf: &mut [u8]) -> Result<usize, Error>`1.9.0

Receives data on the socket from the remote address to which it is connected.

The `connect` method will connect this socket to a remote address. This method will fail if the socket is not connected.

#### `fn set_nonblocking(&self, nonblocking: bool) -> Result<(), Error>`1.9.0

Moves this UDP socket into or out of nonblocking mode.

On Unix this corresponds to calling fcntl, and on Windows this corresponds to calling ioctlsocket.

## Trait Implementations

### `impl Debug for UdpSocket`

#### `fn fmt(&self, f: &mut Formatter) -> Result<(), Error>`

### `impl AsRawFd for UdpSocket`

#### `fn as_raw_fd(&self) -> i32`

### `impl FromRawFd for UdpSocket` 1.1.0

#### `unsafe fn from_raw_fd(fd: i32) -> UdpSocket`

### `impl IntoRawFd for UdpSocket` 1.4.0

#### `fn into_raw_fd(self) -> i32`

# Help

## Keyboard Shortcuts

?
  Show this help dialog
S
  Focus the search field
⇤
  Move up in search results
⇥
  Move down in search results
⏎
  Go to active search result

## Search Tricks

Prefix searches with a type followed by a colon (e.g. `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g. `vec -> usize` or `* -> vec`)