# Poco::Net

# class DatagramSocket

Library: Net
Package: Sockets
Header: Poco/Net/DatagramSocket.h

## Description

This class provides an interface to an UDP stream socket.

## Inheritance

Direct Base Classes: Socket

All Base Classes: Socket

Known Derived Classes: MulticastSocket

## Member Summary

Member Functions: bind, bind6, connect, getBroadcast, operator =, receiveBytes, receiveFrom, sendBytes, sendTo, setBroadcast

Inherited Functions: address, available, close, destroyBufVec, error, fromFileDescriptor, getBlocking, getError, getKeepAlive, getLinger, getNoDelay, getOOBInline, getOption, getReceiveBufferSize, getReceiveTimeout, getReuseAddress, getReusePort, getSendBufferSize, getSendTimeout, impl, init, isDatagram, isNull, isRaw, isStream, lastError, lastErrorDesc, makeBufVec, makeBuffer, operator !=, operator <, operator <=, operator =, operator ==, operator >, operator >=, peerAddress, poll, secure, select, setBlocking, setKeepAlive, setLinger, setNoDelay, setOOBInline, setOption, setReceiveBufferSize, setReceiveTimeout, setReuseAddress, setReusePort, setSendBufferSize, setSendTimeout, sockfd, supportsIPv4, supportsIPv6, type

## Constructors

### DatagramSocket

DatagramSocket();

Creates an unconnected, unbound datagram socket.

Before the datagram socket can be used, bind(), bind6() or connect() must be called.

Notice: The behavior of this constructor has changed in release 2.0. Previously, the constructor created an unbound IPv4 datagram socket.

### DatagramSocket

explicit DatagramSocket(
SocketAddress::Family family
);

Creates an unconnected datagram socket.

The socket will be created for the given address family.

### DatagramSocket

DatagramSocket(
const Socket & socket
);

Creates the DatagramSocket with the SocketImpl from another socket. The SocketImpl must be a DatagramSocketImpl, otherwise an InvalidArgumentException will be thrown.

### DatagramSocket

DatagramSocket(
const DatagramSocket & socket
);

Creates the DatagramSocket with the SocketImpl from another socket.

### DatagramSocket

DatagramSocket(
const SocketAddress & address,
bool reuseAddress,
bool reusePort = false,
bool ipV6Only = false
);

Creates a datagram socket and binds it to the given address.

Depending on the address family, the socket will be either an IPv4 or an IPv6 socket. If ipV6Only is true, socket will be bound to the IPv6 address only.

### DatagramSocket

DatagramSocket(
SocketImpl * pImpl
);

Creates the Socket and attaches the given SocketImpl. The socket takes ownership of the SocketImpl.

The SocketImpl must be a DatagramSocketImpl, otherwise an InvalidArgumentException will be thrown.

## Destructor

### ~DatagramSocket

~DatagramSocket() override;

Destroys the DatagramSocket.

## Member Functions

### bind

void bind(
const SocketAddress & address,
bool reuseAddress = false
);

Bind a local address to the socket.

This is usually only done when establishing a server socket.

If reuseAddress is true, sets the SO_REUSEADDR socket option.

Calls to connect() cannot come before calls to bind().

### bind

void bind(
const SocketAddress & address,
bool reuseAddress,
bool reusePort
);

Bind a local address to the socket.

This is usually only done when establishing a server socket.

If reuseAddress is true, sets the SO_REUSEADDR socket option.

If reusePort is true, sets the SO_REUSEPORT socket option.

Calls to connect() cannot come before calls to bind().

### bind6

void bind6(
const SocketAddress & address,
bool reuseAddress,
bool reusePort,
bool ipV6Only = false
);

Bind a local address to the socket.

This is usually only done when establishing a server socket.

If reuseAddress is true, sets the SO_REUSEADDR socket option.

If reusePort is true, sets the SO_REUSEPORT socket option.

Sets the IPV6_V6ONLY socket option in accordance with the supplied ipV6Only value.

Calls to connect() cannot come before calls to bind().

### connect

void connect(
const SocketAddress & address
);

Restricts incoming and outgoing packets to the specified address.

Calls to connect() cannot come before calls to bind().

### getBroadcast

bool getBroadcast() const;

Returns the value of the SO_BROADCAST socket option.

### operator =

DatagramSocket & operator = (
const Socket & socket
);

Assignment operator.

Releases the socket's SocketImpl and attaches the SocketImpl from the other socket and increments the reference count of the SocketImpl.

### operator =

DatagramSocket & operator = (
const DatagramSocket & socket
);

Assignment operator.

Releases the socket's SocketImpl and attaches the SocketImpl from the other socket and increments the reference count of the SocketImpl.

### receiveBytes

int receiveBytes(
void * buffer,
int length,
int flags = 0
);

Receives data from the socket and stores it in buffer. Up to length bytes are received.

Returns the number of bytes received.

The flags parameter can be used to pass system-defined flags for recv() like MSG_PEEK.

### receiveBytes

int receiveBytes(
SocketBufVec & buffer,
int flags = 0
);

Receives data from the socket and stores it in buffers.

Returns the number of bytes received.

The flags parameter can be used to pass system-defined flags for recv() like MSG_PEEK.

### receiveBytes

int receiveBytes(
Poco::Buffer < char > & buffer,
int flags = 0,
const Poco::Timespan & timeout = 100000
);

Receives data from the socket and stores it in buffers.

Returns the number of bytes received.

The flags parameter can be used to pass system-defined flags for recv() like MSG_PEEK.

### receiveFrom

int receiveFrom(
void * buffer,
int length,
SocketAddress & address,
int flags = 0
);

Receives data from the socket and stores it in buffer. Up to length bytes are received. Stores the address of the sender in address.

Returns the number of bytes received.

The flags parameter can be used to pass system-defined flags for recvfrom() like MSG_PEEK.

### receiveFrom

int receiveFrom(
void * buffer,
int length,
struct sockaddr * * ppSA,
socklen_t * * ppSALen,
int flags = 0
);

Receives data from the socket and stores it in buffer. Up to length bytes are received. Stores the native address of the sender in ppSA, and the length of native address in ppSALen.

Returns the number of bytes received.

The flags parameter can be used to pass system-defined flags for recvfrom() like MSG_PEEK.

### receiveFrom

int receiveFrom(
SocketBufVec & buffers,
SocketAddress & address,
int flags = 0
);

Receives data from the socket and stores it in buffers. Up to total length of all buffers are received. Stores the address of the sender in address.

Returns the number of bytes received.

The flags parameter can be used to pass system-defined flags for recvfrom() like MSG_PEEK.

### receiveFrom

int receiveFrom(
SocketBufVec & buffers,
struct sockaddr * * ppSA,
socklen_t * * ppSALen,
int flags = 0
);

Receives data from the socket and stores it in buffers. Stores the native address of the sender in ppSA, and the length of native address in ppSALen.

Returns the number of bytes received.

The flags parameter can be used to pass system-defined flags for recvfrom() like MSG_PEEK.

### sendBytes

int sendBytes(
const void * buffer,
int length,
int flags = 0
);

Sends the contents of the given buffer through the socket.

Returns the number of bytes sent, which may be less than the number of bytes specified.

The flags parameter can be used to pass system-defined flags for send() like MSG_DONTROUTE.

### sendBytes

int sendBytes(
const SocketBufVec & buffer,
int flags = 0
);

Sends the contents of the given buffers through the socket.

Returns the number of bytes sent, which may be less than the number of bytes specified.

The flags parameter can be used to pass system-defined flags for send() like MSG_DONTROUTE.

### sendTo

int sendTo(
const void * buffer,
int length,
const SocketAddress & address,
int flags = 0
);

Sends the contents of the given buffer through the socket to the given address.

Returns the number of bytes sent, which may be less than the number of bytes specified.

The flags parameter can be used to pass system-defined flags for sendto() like MSG_DONTROUTE.

### sendTo

int sendTo(
const SocketBufVec & buffers,
const SocketAddress & address,
int flags = 0
);

Sends the contents of the given buffers through the socket to the given address.

Returns the number of bytes sent, which may be less than the number of bytes specified.

The flags parameter can be used to pass system-defined flags for sendto() like MSG_DONTROUTE.

### setBroadcast

void setBroadcast(
bool flag
);

Sets the value of the SO_BROADCAST socket option.

Setting this flag allows sending datagrams to the broadcast address.