12void setBroadcast(
int socket)
16 int broadcastPermission = 1;
20 (raw_type*)&broadcastPermission,
21 sizeof(broadcastPermission));
24int groupAction(
int socket,
const std::string& multicastGroup,
int action)
26 struct ip_mreq multicastRequest;
27 multicastRequest.imr_multiaddr.s_addr = inet_addr( multicastGroup.c_str());
28 multicastRequest.imr_interface.s_addr = htonl(INADDR_ANY);
30 return( setsockopt( socket,
33 (raw_type*)&multicastRequest,
34 sizeof(multicastRequest)));
45void UDPSocket::sendTo(
const void* buffer,
size_t len, std::string_view foreignAddress,
unsigned short foreignPort)
48 fillAddress( foreignAddress, foreignPort, destAddr);
59 sockaddr_in clientAddr;
60 socklen_t addrLen =
sizeof(clientAddr);
66 sourceAddress = inet_ntoa( clientAddr.sin_addr);
67 sourcePort = ntohs( clientAddr.sin_port);
76 poll.events = POLLIN | POLLPRI | POLLRDHUP;
80 if( ret == 0)
return 0;
83 if( poll.revents & POLLRDHUP)
86 if( poll.revents & POLLIN || poll.revents & POLLPRI)
97 (raw_type*)&multicastTTL,
98 sizeof(multicastTTL)) < 0)
104 struct in_addr interfaceAddr;
105 inet_aton( address.c_str(), &interfaceAddr);
110 (raw_type*)&interfaceAddr,
111 sizeof(interfaceAddr)) < 0)
112 throw SocketException(
"Multicast set Interface Address failed (setsockopt)");
117 if( groupAction(
m_socket, multicastGroup, IP_ADD_MEMBERSHIP) < 0)
123 if( groupAction(
m_socket, multicastGroup, IP_DROP_MEMBERSHIP) < 0)
#define TEMP_FAILURE_RETRY(expression)
InternetSocket(int sockfd)
create socket from a SocketHandle returned by an accept() call
static void fillAddress(std::string_view address, unsigned short port, sockaddr_in &addr)
Signals a problem with the execution of a socket call.
int timedReceiveFrom(void *buffer, size_t len, std::string &sourceAddress, unsigned short &sourcePort, int timeout)
int receiveFrom(void *buffer, size_t len, std::string &sourceAddress, unsigned short &sourcePort)
void setMulticastTTL(unsigned char multicastTTL)
void setMulticastInterfaceAddr(const std::string &address)
void joinGroup(const std::string &multicastGroup)
void sendTo(const void *buffer, size_t len, std::string_view foreignAddress, unsigned short foreignPort)
void leaveGroup(const std::string &multicastGroup)