nidas
v1.2-1520
|
A socket for sending or receiving datagrams, either unicast, broadcast or multicast. More...
#include <Socket.h>
Public Member Functions | |
DatagramSocket () throw (IOException) | |
Create a DatagramSocket not bound to a port. More... | |
DatagramSocket (int port) throw (IOException) | |
Create a DatagramSocket bound to a port on all local interfaces (a local address of INADDR_ANY). More... | |
throw (IOException) | |
Creates a datagram socket and binds it to a port at the specified local address. More... | |
throw (IOException) | |
Creates a DatagramSocket and binds it to the specified local address. More... | |
virtual | ~DatagramSocket () throw () |
MulticastSocket is derived from DatagramSocket, so we provide a virtual destructor. More... | |
void | close () throw (IOException) |
void | setTimeout (int val) |
Set the timeout for receive(), recv(), and recvfrom() methods. More... | |
void | connect (const std::string &host, int port) throw (UnknownHostException,IOException) |
Datagrams are connectionless, so this doesn't establish a true connection, it just sets the default destination address for the send() calls. More... | |
void | connect (const Inet4Address &addr, int port) throw (IOException) |
Datagrams are connectionless, so this doesn't establish a true connection, it just sets the default destination address for the send() calls. More... | |
void | connect (const SocketAddress &addr) throw (IOException) |
Datagrams are connectionless, so this doesn't establish a true connection, it just sets the default destination address for the send() calls. More... | |
void | bind (const Inet4Address &addr, int port) throw (IOException) |
Bind the DatagramSocket to the specified local address. More... | |
void | bind (const SocketAddress &addr) throw (IOException) |
Bind the DatagramSocket to the specified local address. More... | |
int | getFd () const |
void | receive (DatagramPacketBase &packet) throw (IOException) |
Read a packet from the DatagramSocket. More... | |
void | receive (DatagramPacketBase &packet, Inet4PacketInfo &info, int flags=0) throw (IOException) |
Read a packet from the DatagramSocket. More... | |
void | send (const DatagramPacketBase &packet, int flags=0) throw (IOException) |
size_t | recv (void *buf, size_t len, int flags=0) throw (IOException) |
size_t | recvfrom (void *buf, size_t len, int flags, SocketAddress &from) throw (IOException) |
size_t | send (const void *buf, size_t len, int flags=0) throw (IOException) |
size_t | send (const struct iovec *iov, int iovcnt, int flags=MSG_NOSIGNAL) throw (IOException) |
size_t | sendto (const void *buf, size_t len, int flags, const SocketAddress &to) throw (IOException) |
size_t | sendto (const struct iovec *iov, int iovcnt, int flags, const SocketAddress &to) throw (IOException) |
const SocketAddress & | getLocalSocketAddress () const throw () |
Get local address of this socket. More... | |
int | getLocalPort () const throw () |
Get local port number of this socket. More... | |
void | setNonBlocking (bool val) throw (IOException) |
Do fcntl system call to set O_NONBLOCK file descriptor flag on the socket. More... | |
bool | isNonBlocking () const throw (IOException) |
void | setReceiveBufferSize (int size) throw (IOException) |
int | getReceiveBufferSize () throw (IOException) |
void | setSendBufferSize (int size) throw (IOException) |
int | getSendBufferSize () throw (IOException) |
std::list< Inet4NetworkInterface > | getInterfaces () const throw (IOException) |
void | setBroadcastEnable (bool val) throw (IOException) |
bool | getBroadcastEnable () const throw (IOException) |
void | setPktInfo (bool val) throw (IOException) |
Control whether a IP_PKTINFO ancillary message is received with each datagram. More... | |
Protected Attributes | |
SocketImpl | _impl |
A socket for sending or receiving datagrams, either unicast, broadcast or multicast.
This class provides the default public copy constructors and assignment operators. Objects of this class can be copied and assigned to without restriction. However, because of this, the destructor does not close the socket, so, in general, you should make sure that the socket is closed once at some point.
Typical usage: A receiver of datagrams on port 9000:
A unicast sender of datagrams on port 9000:
A multicast sender of datagrams on port 9000:
A broadcast sender of datagrams on port 9000 to the limited broadcast address of 255.255.255.255. This will fail with a "Network is unreachable" error if there are no external network interfaces UP with an assigned address. Use a broadcast address of 127.255.255.255 to "broadcast" on the loopback interface.
DatagramSocket::DatagramSocket | ( | ) | ||
throw | ( | IOException | ||
) |
Create a DatagramSocket not bound to a port.
DatagramSocket::DatagramSocket | ( | int | port | ) | |
throw | ( | IOException | |||
) |
Create a DatagramSocket bound to a port on all local interfaces (a local address of INADDR_ANY).
port | Port number, 0<=port<=65535. If zero, the system will select an available port number. To find out which port number was selected, use getLocalPort(). |
References port.
|
inlinevirtual |
MulticastSocket is derived from DatagramSocket, so we provide a virtual destructor.
Currently there are no other virtual methods, may need some more thought.
|
inline |
Bind the DatagramSocket to the specified local address.
The address should correspond to the address of a local interface. Only packets sent to the given port and interface, by unicast, broadcast or multicast will be received.
Referenced by nidas::core::DatagramSocket::connect(), and nidas::core::DerivedDataReader::run().
|
inline |
Bind the DatagramSocket to the specified local address.
The address should correspond to the address of a local interface. Only packets sent to the given port and interface, by unicast, broadcast or multicast will be received.
|
inline |
Referenced by nidas::core::MultipleUDPSockets::close(), nidas::core::UDPSocketIODevice::close(), nidas::core::DatagramSocket::close(), PacketReader::loop(), nidas::core::StatusListener::run(), nidas::core::DerivedDataReader::run(), nidas::core::DSMEngineStat::run(), nidas::util::McSocketListener::run(), nidas::util::McSocketMulticaster< SocketTT >::run(), nidas::util::McSocketListener::~McSocketListener(), and nidas::util::McSocketMulticaster< SocketTT >::~McSocketMulticaster().
|
inline |
Datagrams are connectionless, so this doesn't establish a true connection, it just sets the default destination address for the send() calls.
Referenced by nidas::core::DatagramSocket::connect(), and nidas::util::McSocketListener::run().
|
inline |
Datagrams are connectionless, so this doesn't establish a true connection, it just sets the default destination address for the send() calls.
|
inline |
Datagrams are connectionless, so this doesn't establish a true connection, it just sets the default destination address for the send() calls.
|
inline |
|
inline |
Referenced by nidas::core::UDPSocketIODevice::close(), nidas::core::MultipleUDPSockets::getFd(), nidas::core::DatagramSocket::getFd(), nidas::core::UDPSocketIODevice::getReadFd(), nidas::core::UDPSocketIODevice::getWriteFd(), nidas::core::DerivedDataReader::run(), nidas::util::McSocketListener::run(), and nidas::util::McSocketMulticaster< SocketTT >::run().
|
inline |
Referenced by nidas::core::DatagramSocket::getInterfaces().
|
inline |
Get local port number of this socket.
Referenced by nidas::core::StatusListener::run(), and nidas::util::McSocketMulticaster< SocketTT >::run().
|
inline |
Get local address of this socket.
Referenced by nidas::core::MultipleUDPSockets::handleChangedSockets(), nidas::core::StatusListener::run(), nidas::core::DerivedDataReader::run(), nidas::core::DSMEngineStat::run(), nidas::util::McSocketListener::run(), and nidas::util::McSocketMulticaster< SocketTT >::run().
|
inline |
|
inline |
|
inline |
Referenced by nidas::core::DatagramSocket::isNonBlocking().
|
inline |
Read a packet from the DatagramSocket.
On return, packet.getLength() will contain the number bytes received, and packet.getSocketAddress() will contain the address of the sender.
Referenced by PacketReader::loop(), nidas::core::DerivedDataReader::run(), nidas::util::McSocketListener::run(), and nidas::util::McSocketMulticaster< SocketTT >::run().
|
inline |
Read a packet from the DatagramSocket.
On return, packet.getLength() will contain the number bytes received, and packet.getSocketAddress() will contain the address of the sender. info will contain the information on the local and destination addresses of the packet, and the interface it was received on. If setPktInfo(true) has not be set on this socket, then it is set prior to receiving the packet, and then unset after receipt of the packet.
|
inline |
Referenced by nidas::core::UDPSocketIODevice::read(), and nidas::core::DatagramSocket::read().
|
inline |
References len.
Referenced by nidas::core::StatusListener::run().
|
inline |
|
inline |
|
inline |
|
inline |
References len.
Referenced by nidas::core::StatusThread::sendStatus(), and nidas::core::MultipleUDPSockets::write().
|
inline |
|
inline |
|
inline |
Do fcntl system call to set O_NONBLOCK file descriptor flag on the socket.
val | true=set O_NONBLOCK, false=unset O_NONBLOCK. |
Referenced by nidas::core::DatagramSocket::connect(), nidas::core::McSocketUDP::connect(), nidas::core::McSocketUDP::connected(), and nidas::core::DatagramSocket::setNonBlocking().
|
inline |
Control whether a IP_PKTINFO ancillary message is received with each datagram.
Only supported on DatagramSockets. The IP_PKTINFO message is converted to an Inet4PacketInfo object which is available via the getInet4PacketInfo() method.
val,: | if true enable the IP_PKTINFO message, if false, disable. |
|
inline |
|
inline |
|
inline |
Set the timeout for receive(), recv(), and recvfrom() methods.
val | timeout in milliseconds. 0=no timeout (infinite) The receive methods will return IOTimeoutException if an operation times out. |
nidas::util::DatagramSocket::throw | ( | IOException | ) |
Creates a datagram socket and binds it to a port at the specified local address.
The address should correspond to the address of a local interface. Only packets sent the given port and interface, by unicast, broadcast or multicast will be received.
nidas::util::DatagramSocket::throw | ( | IOException | ) |
Creates a DatagramSocket and binds it to the specified local address.
The address should correspond to the address of a local interface. Only packets sent the given port and interface, by unicast, broadcast or multicast will be received.
|
protected |