44#ifndef COMMONCPP_UDP_H_
45#define COMMONCPP_UDP_H_
49#ifndef COMMONCPP_CONFIG_H_
50#include <commoncpp/config.h>
53#ifndef COMMONCPP_STRING_H_
57#ifndef COMMONCPP_ADDRESS_H_
61#ifndef COMMONCPP_SOCKET_H_
99class __EXPORT UDPSocket :
public Socket
102 inline Error setKeepAlive(
bool enable)
103 {
return Socket::setKeepAlive(enable);}
105 __DELETE_COPY(UDPSocket);
108 Socket::address peer;
116 UDPSocket(Family family = IPV4);
121 UDPSocket(
const char *name, Family family = IPV4);
132 UDPSocket(
const ucommon::Socket::address &bind);
133 UDPSocket(
const IPV4Address &bind, tpport_t port);
135 UDPSocket(
const IPV6Address &bind, tpport_t port);
141 virtual ~UDPSocket();
146 inline Error setLoopback(
bool enable)
147 {
return Socket::setLoopbackByFamily(enable, family);}
152 inline Error setMulticast(
bool enable)
153 {
return Socket::setMulticastByFamily(enable, family);}
158 inline Error setTimeToLive(
char ttl)
159 {
return Socket::setTimeToLiveByFamily(ttl, family);}
168 void setPeer(
const ucommon::Socket::address &host);
169 void connect(
const ucommon::Socket::address &host);
171 void setPeer(
const IPV4Host &host, tpport_t port);
172 void connect(
const IPV4Host &host, tpport_t port);
174 void setPeer(
const IPV6Host &host, tpport_t port);
175 void connect(
const IPV6Host &host, tpport_t port);
185 Socket::Error getInterfaceIndex(
const char *ethX,
int& InterfaceIndex);
195 Socket::Error join(
const ucommon::Socket::address &ia,
int InterfaceIndex=0);
196 Socket::Error join(
const IPV4Multicast &ia,
int InterfaceIndex);
205 ssize_t send(
const void *buf,
size_t len);
215 ssize_t receive(
void *buf,
size_t len,
bool reply =
false);
225 ucommon::Socket::address getPeer();
227 IPV4Host getIPV4Peer(tpport_t *port = NULL);
228 inline IPV4Host getPeer(tpport_t *port)
229 {
return getIPV4Peer(port);}
232 IPV6Host getIPV6Peer(tpport_t *port = NULL);
242 inline ssize_t peek(
void *buf,
size_t len)
243 {return ::recv(so, (
char *)buf, (socksize_t)len, MSG_PEEK);}
248 void setPeer(
const char *service);
249 void connect(
const char *service);
255 Error disconnect(
void);
266class __EXPORT UDPBroadcast :
public UDPSocket
269 void setPeer(
const IPV4Host &ia, tpport_t port);
271 Error setBroadcast(
bool enable)
272 {
return Socket::setBroadcast(enable);}
274 __DELETE_COPY(UDPBroadcast);
283 UDPBroadcast(
const IPV4Address &ia, tpport_t port);
291 void setPeer(
const IPV4Broadcast &subnet, tpport_t port);
302class __EXPORT UDPTransmit :
protected UDPSocket
312 Error cConnect(
const IPV4Address &ia, tpport_t port);
314 __DELETE_COPY(UDPTransmit);
320 UDPTransmit(Family family = IPV4);
334 UDPTransmit(
const ucommon::Socket::address &bind);
336 UDPTransmit(
const IPV4Address &bind, tpport_t port = 5005);
338 UDPTransmit(
const IPV6Address &bind, tpport_t port = 5005);
350 Error connect(
const ucommon::Socket::address &host);
352 Error connect(
const IPV4Host &host, tpport_t port);
354 Error connect(
const IPV6Address &host, tpport_t port);
366 Error connect(
const IPV4Broadcast &subnet, tpport_t port);
375 Error connect(
const IPV4Multicast &mgroup, tpport_t port);
377 Error connect(
const IPV6Multicast &mgroup, tpport_t port);
387 inline ssize_t send(
const void *buf,
size_t len)
388 {return ::send(so, (
const char *)buf, (socksize_t)len, MSG_NOSIGNAL);}
393 inline void endTransmitter(
void)
394 {Socket::endSocket();}
401 inline SOCKET getTransmitter(
void)
404 inline Error setMulticast(
bool enable)
405 {
return Socket::setMulticastByFamily(enable, family);}
407 inline Error setTimeToLive(uint8_t ttl)
408 {
return Socket::setTimeToLiveByFamily(ttl, family);}
420 inline ssize_t transmit(
const char *buffer,
size_t len)
421 {return ::send(so, buffer, (socksize_t)len, MSG_DONTWAIT|MSG_NOSIGNAL);}
429 inline bool isOutputReady(
unsigned long timeout = 0l) {
430 return Socket::isPending(Socket::pendingOutput, timeout);
434 inline Error setRouting(
bool enable)
435 {
return Socket::setRouting(enable);}
437 inline Error setTypeOfService(Tos tos)
438 {
return Socket::setTypeOfService(tos);}
440 inline Error setBroadcast(
bool enable)
441 {
return Socket::setBroadcast(enable);}
452class __EXPORT UDPReceive :
protected UDPSocket
455 __DELETE_COPY(UDPReceive);
467 UDPReceive(
const ucommon::Socket::address &bind);
468 UDPReceive(
const IPV4Address &bind, tpport_t port);
470 UDPReceive(
const IPV6Address &bind, tpport_t port);
482 Error connect(
const ucommon::Socket::address &host);
483 Error connect(
const IPV4Host &host, tpport_t port);
485 Error connect(
const IPV6Host &host, tpport_t port);
494 bool isPendingReceive(timeout_t timeout) {
495 return Socket::isPending(Socket::pendingInput, timeout);
501 inline void endReceiver(
void)
502 {Socket::endSocket();}
504 inline SOCKET getReceiver(
void)
const
507 inline Error setRouting(
bool enable)
508 {
return Socket::setRouting(enable);}
510 inline Error setMulticast(
bool enable)
511 {
return Socket::setMulticastByFamily(enable, family);}
513 inline Error join(
const ucommon::Socket::address &ia)
514 {
return Socket::join(ia);}
516 inline Error join(
const IPV4Multicast &ia)
517 {
return Socket::join(ia);}
520 inline Error join(
const IPV6Multicast &ia)
521 {
return Socket::join(ia);}
524 inline Error drop(
const IPV4Multicast &ia)
525 {
return Socket::drop(ia);}
528 inline Error drop(
const IPV6Multicast &ia)
529 {
return Socket::drop(ia);}
540 inline ssize_t receive(
void *buf,
size_t len)
541 {return ::recv(so, (
char *)buf, (socksize_t)len, 0);}
549 inline bool isInputReady(timeout_t timeout = TIMEOUT_INF) {
550 return Socket::isPending(Socket::pendingInput, timeout);
564class __EXPORT UDPDuplex :
public UDPTransmit,
public UDPReceive
567 __DELETE_COPY(UDPDuplex);
577 UDPDuplex(
const ucommon::Socket::address &bind);
578 UDPDuplex(
const IPV4Address &bind, tpport_t port);
580 UDPDuplex(
const IPV6Address &bind, tpport_t port);
592 Error connect(
const ucommon::Socket::address &host);
593 Error connect(
const IPV4Host &host, tpport_t port);
595 Error connect(
const IPV6Host &host, tpport_t port);
604 Error disconnect(
void);
Network addresses and sockets related classes.
Common C++ generic string class.