25 #include <netcomm/socket/datagram_broadcast.h> 27 #include <sys/socket.h> 28 #include <netinet/in.h> 29 #include <arpa/inet.h> 54 :
Socket(IPv4, UDP, timeout)
56 broadcast_addr = (struct ::sockaddr_in *)malloc(
sizeof(struct ::sockaddr_in));
59 if ( inet_aton(broadcast_addr_s, &a) == -1 ) {
62 broadcast_addr->sin_family = AF_INET;
63 broadcast_addr->sin_addr.s_addr = a.s_addr;
64 broadcast_addr->sin_port = htons(port);
86 broadcast_addr = (struct ::sockaddr_in *)malloc(
sizeof(struct ::sockaddr_in));
87 memcpy(broadcast_addr, datagram_socket.broadcast_addr,
sizeof(struct ::sockaddr_in));
98 if ( setsockopt(
sock_fd, SOL_SOCKET, SO_BROADCAST, &broadcast,
sizeof(broadcast)) == -1) {
103 if ( setsockopt(
sock_fd, SOL_SOCKET, SO_REUSEADDR, &reuse,
sizeof(reuse)) == -1) {
107 struct ::sockaddr_in local;
108 local.sin_family = AF_INET;
109 local.sin_addr.s_addr = INADDR_ANY;
110 local.sin_port = broadcast_addr->sin_port;
112 if (::
bind(
sock_fd, (struct ::sockaddr *) &local,
sizeof(local)) < 0) {
120 broadcast_addr->sin_port = htons(port);
128 free(broadcast_addr);
129 broadcast_addr = (struct ::sockaddr_in *)malloc(
sizeof(struct ::sockaddr_in));
132 if ( inet_aton(hostname, &a) == -1 ) {
135 broadcast_addr->sin_family = AF_INET;
136 broadcast_addr->sin_addr.s_addr = a.s_addr;
137 broadcast_addr->sin_port = htons(port);
162 Socket::send(buf, buf_len, (struct ::sockaddr *)broadcast_addr,
sizeof(struct ::sockaddr_in));
164 e.
append(
"BroadcastDatagramSocket::send(void*, unsigned int) failed");
BroadcastDatagramSocket(const char *broadcast_addr_s, unsigned short port, float timeout=0.f)
Constructor.
virtual ~BroadcastDatagramSocket()
Destructor.
Fawkes library namespace.
Broadcast datagram socket.
virtual void bind()
Bind socket.
virtual Socket * clone()
Clone socket.
int sock_fd
Socket file descriptor.
virtual void send(void *buf, size_t buf_len)
Write to the socket.
virtual void send(void *buf, size_t buf_len)
Send data.
void append(const char *format,...)
Append messages to the message list.