nidas v1.2.3
|
A datagram socket to be used for multicasts. More...
#include <Socket.h>
Public Member Functions | |
MulticastSocket () | |
Create an unbound multicast socket. | |
MulticastSocket (int port) | |
Create multicast socket, bind it to a local port. | |
MulticastSocket (const Inet4SocketAddress &addr) | |
Creates a datagram socket and binds it to the specified local address. | |
void | joinGroup (Inet4Address groupAddr) |
Join a multicast group on all interfaces. | |
void | joinGroup (Inet4Address groupAddr, const Inet4NetworkInterface &iface) |
Join a multicast group on a given interface. | |
void | leaveGroup (Inet4Address groupAddr) |
Leave a multicast group on all interfaces. | |
void | leaveGroup (Inet4Address groupAddr, const Inet4NetworkInterface &iface) |
Leave a multicast group on a given interface. | |
void | setTimeToLive (int val) |
int | getTimeToLive () const |
void | setMulticastLoop (bool val) |
Whether to set the IP_MULTICAST_LOOP socket option. | |
bool | getMulticastLoop () const |
void | setInterface (Inet4Address maddr, const Inet4NetworkInterface &iface) |
Set the interface for a given multicast address. | |
void | setInterface (Inet4Address iaddr) |
Set the interface for a given multicast address. | |
Inet4NetworkInterface | getInterface () const |
Inet4NetworkInterface | findInterface (const Inet4Address &iaddr) const |
std::list< Inet4NetworkInterface > | getInterfaces () const |
Return the IP addresses of all my network interfaces. | |
void | close () |
void | setTimeout (int val) |
Set the timeout for receive(), recv(), and recvfrom() methods. | |
void | connect (const std::string &host, int port) |
Datagrams are connectionless, so this doesn't establish a true connection, it just sets the default destination address for the send() calls. | |
void | connect (const Inet4Address &addr, int port) |
Datagrams are connectionless, so this doesn't establish a true connection, it just sets the default destination address for the send() calls. | |
void | connect (const SocketAddress &addr) |
Datagrams are connectionless, so this doesn't establish a true connection, it just sets the default destination address for the send() calls. | |
void | bind (const Inet4Address &addr, int port) |
Bind the DatagramSocket to the specified local address. | |
void | bind (const SocketAddress &addr) |
Bind the DatagramSocket to the specified local address. | |
int | getFd () const |
void | receive (DatagramPacketBase &packet) |
Read a packet from the DatagramSocket. | |
void | receive (DatagramPacketBase &packet, Inet4PacketInfo &info, int flags=0) |
Read a packet from the DatagramSocket. | |
void | send (const DatagramPacketBase &packet, int flags=0) |
size_t | send (const void *buf, size_t len, int flags=0) |
size_t | send (const struct iovec *iov, int iovcnt, int flags=MSG_NOSIGNAL) |
size_t | recv (void *buf, size_t len, int flags=0) |
size_t | recvfrom (void *buf, size_t len, int flags, SocketAddress &from) |
size_t | sendto (const void *buf, size_t len, int flags, const SocketAddress &to) |
size_t | sendto (const struct iovec *iov, int iovcnt, int flags, const SocketAddress &to) |
const SocketAddress & | getLocalSocketAddress () const |
Get local address of this socket. | |
int | getLocalPort () const |
Get local port number of this socket. | |
void | setNonBlocking (bool val) |
Do fcntl system call to set O_NONBLOCK file descriptor flag on the socket. | |
bool | isNonBlocking () const |
void | setReceiveBufferSize (int size) |
int | getReceiveBufferSize () |
void | setSendBufferSize (int size) |
int | getSendBufferSize () |
void | setBroadcastEnable (bool val) |
bool | getBroadcastEnable () const |
void | setPktInfo (bool val) |
Control whether a IP_PKTINFO ancillary message is received with each datagram. | |
Protected Attributes | |
SocketImpl | _impl |
A datagram socket to be used for multicasts.
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.
Usage example:
Note: if the above examples are not working for you, check your firewall settings. They might be blocking multicasts.
|
inline |
Create an unbound multicast socket.
You must bind it to a port if you want to receive packets. If you are sending packets on this MulticastSocket, and do not use getInterfaces() and setInterface() to choose a specific interface, the system sends packets out on the first non-loopback interface that it finds. If a firewall is blocking multicast packets on that interface the packets won't be sent.
IOException |
|
inline |
Create multicast socket, bind it to a local port.
IOException |
|
inline |
Creates a datagram socket and binds it to the specified local address.
IOException |
|
inlineinherited |
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.
IOException |
References nidas::util::DatagramSocket::_impl, nidas::util::SocketImpl::bind(), and port.
Referenced by nidas::core::DatagramSocket::connect(), and nidas::core::UDPSocketIODevice::open().
|
inlineinherited |
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.
IOException |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::bind().
|
inlineinherited |
IOException |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::close().
Referenced by nidas::core::DatagramSocket::close(), nidas::core::MultipleUDPSockets::close(), nidas::core::UDPSocketIODevice::close(), nidas::util::DatagramSocket::DatagramSocket(), nidas::util::DatagramSocket::DatagramSocket(), nidas::util::DatagramSocket::DatagramSocket(), nidas::util::McSocketListener::run(), and nidas::util::McSocketListener::~McSocketListener().
|
inlineinherited |
Datagrams are connectionless, so this doesn't establish a true connection, it just sets the default destination address for the send() calls.
IOException |
References nidas::util::DatagramSocket::_impl, nidas::util::SocketImpl::connect(), and port.
|
inlineinherited |
Datagrams are connectionless, so this doesn't establish a true connection, it just sets the default destination address for the send() calls.
IOException |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::connect().
|
inlineinherited |
Datagrams are connectionless, so this doesn't establish a true connection, it just sets the default destination address for the send() calls.
UnknownHostException | |
IOException |
References nidas::util::DatagramSocket::_impl, nidas::util::SocketImpl::connect(), and port.
Referenced by nidas::core::DatagramSocket::connect().
|
inline |
IOException |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::findInterface().
|
inlineinherited |
IOException |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::getBroadcastEnable().
|
inlineinherited |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::getFd().
Referenced by nidas::core::UDPSocketIODevice::close(), nidas::core::DatagramSocket::getFd(), nidas::core::MultipleUDPSockets::getFd(), nidas::core::UDPSocketIODevice::getReadFd(), nidas::core::UDPSocketIODevice::getWriteFd(), and nidas::util::McSocketListener::run().
|
inline |
IOException |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::getInterface().
|
inline |
Return the IP addresses of all my network interfaces.
IOException |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::getInterfaces().
|
inlineinherited |
Get local port number of this socket.
)
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::getLocalPort().
|
inlineinherited |
Get local address of this socket.
)
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::getLocalSocketAddress().
Referenced by nidas::util::McSocketListener::run().
|
inline |
IOException |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::getTimeToLive().
|
inlineinherited |
IOException |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::getReceiveBufferSize().
Referenced by nidas::core::DatagramSocket::getBufferSize(), and nidas::core::MultipleUDPSockets::getBufferSize().
|
inlineinherited |
IOException |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::getSendBufferSize().
|
inline |
IOException |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::getTimeToLive().
|
inlineinherited |
IOException |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::isNonBlocking().
Referenced by nidas::core::DatagramSocket::isNonBlocking().
|
inline |
Join a multicast group on all interfaces.
IOException |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::joinGroup().
|
inline |
Join a multicast group on a given interface.
IOException |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::joinGroup().
|
inline |
Leave a multicast group on all interfaces.
IOException |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::leaveGroup().
|
inline |
Leave a multicast group on a given interface.
IOException |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::leaveGroup().
|
inlineinherited |
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.
IOException |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::receive().
Referenced by nidas::util::McSocketListener::run().
|
inlineinherited |
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.
IOException |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::receive().
|
inlineinherited |
IOException |
References nidas::util::DatagramSocket::_impl, len, and nidas::util::SocketImpl::recv().
Referenced by nidas::core::DatagramSocket::read(), nidas::core::UDPSocketIODevice::read(), and nidas::core::UDPSocketIODevice::read().
|
inlineinherited |
IOException |
References nidas::util::DatagramSocket::_impl, len, and nidas::util::SocketImpl::recvfrom().
|
inlineinherited |
IOException |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::send().
Referenced by nidas::core::DatagramSocket::write(), nidas::core::DatagramSocket::write(), and nidas::core::UDPSocketIODevice::write().
|
inlineinherited |
IOException |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::send().
|
inlineinherited |
IOException |
References nidas::util::DatagramSocket::_impl, len, and nidas::util::SocketImpl::send().
|
inlineinherited |
IOException |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::sendto().
|
inlineinherited |
IOException |
References nidas::util::DatagramSocket::_impl, len, and nidas::util::SocketImpl::sendto().
Referenced by nidas::core::MultipleUDPSockets::write(), and nidas::core::MultipleUDPSockets::write().
|
inlineinherited |
IOException |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::setBroadcastEnable().
Referenced by nidas::core::UDPSocketIODevice::open().
|
inline |
Set the interface for a given multicast address.
This uses the default value of INADDR_ANY for the specific interface, which causes the system to choose what it thinks is the most appropriate interface, typically the first ethernet interface on the system. If you have more than one candidate interface, you can add an entry in the routing table to indicate which you want to use: route add -host 239.0.0.10 dev eth1
IOException |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::setInterface().
|
inline |
Set the interface for a given multicast address.
If you are sending packets on this MulticastSocket, and do not use setInterface() specific interface, the system will send packets out on the first interface that it finds that is capable of MULTICAST. See setInterface(Inet4Address maddr);
If there are no multicast interfaces that are UP, then the system may not choose the loopback interface by default. So doing multicast on a DHCP laptop that isn't connected to the net may give problems.
IOException |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::setInterface().
|
inline |
Whether to set the IP_MULTICAST_LOOP socket option.
According to "man 7 ip", IP_MULTICAST_LOOP controls "whether sent multicast packets should be looped back to the local sockets." This is the default in Linux in that setting it does not seem to be necessary for a process on a host to receive multicast packets that are sent out on one of its interfaces, providing the multicast reader has joined that interface, and a firewall is not blocking them (a source of frustration!).
IOException |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::setTimeToLive().
|
inlineinherited |
Do fcntl system call to set O_NONBLOCK file descriptor flag on the socket.
val | true=set O_NONBLOCK, false=unset O_NONBLOCK. |
IOException |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::setNonBlocking().
Referenced by nidas::core::DatagramSocket::connect(), nidas::core::McSocketUDP::connect(), and nidas::core::DatagramSocket::setNonBlocking().
|
inlineinherited |
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. |
IOException |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::setPktInfo().
|
inlineinherited |
IOException |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::setReceiveBufferSize().
|
inlineinherited |
IOException |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::setSendBufferSize().
|
inlineinherited |
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. |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::setTimeout().
Referenced by nidas::core::UDPSocketIODevice::read().
|
inline |
IOException |
References nidas::util::DatagramSocket::_impl, and nidas::util::SocketImpl::setTimeToLive().
|
protectedinherited |
Referenced by nidas::util::DatagramSocket::bind(), nidas::util::DatagramSocket::bind(), nidas::util::DatagramSocket::close(), nidas::util::DatagramSocket::connect(), nidas::util::DatagramSocket::connect(), nidas::util::DatagramSocket::connect(), nidas::util::DatagramSocket::DatagramSocket(), nidas::util::DatagramSocket::DatagramSocket(), nidas::util::DatagramSocket::DatagramSocket(), findInterface(), nidas::util::DatagramSocket::getBroadcastEnable(), nidas::util::DatagramSocket::getFd(), getInterface(), nidas::util::DatagramSocket::getInterfaces(), getInterfaces(), nidas::util::DatagramSocket::getLocalPort(), nidas::util::DatagramSocket::getLocalSocketAddress(), getMulticastLoop(), nidas::util::DatagramSocket::getReceiveBufferSize(), nidas::util::DatagramSocket::getSendBufferSize(), getTimeToLive(), nidas::util::DatagramSocket::isNonBlocking(), joinGroup(), joinGroup(), leaveGroup(), leaveGroup(), nidas::util::DatagramSocket::receive(), nidas::util::DatagramSocket::receive(), nidas::util::DatagramSocket::recv(), nidas::util::DatagramSocket::recvfrom(), nidas::util::DatagramSocket::send(), nidas::util::DatagramSocket::send(), nidas::util::DatagramSocket::send(), nidas::util::DatagramSocket::sendto(), nidas::util::DatagramSocket::sendto(), nidas::util::DatagramSocket::setBroadcastEnable(), setInterface(), setInterface(), setMulticastLoop(), nidas::util::DatagramSocket::setNonBlocking(), nidas::util::DatagramSocket::setPktInfo(), nidas::util::DatagramSocket::setReceiveBufferSize(), nidas::util::DatagramSocket::setSendBufferSize(), nidas::util::DatagramSocket::setTimeout(), and setTimeToLive().