25 #include <arpa/inet.h>
26 #include <netcomm/socket/datagram_broadcast.h>
27 #include <netinet/in.h>
28 #include <sys/socket.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);
84 broadcast_addr = (struct ::sockaddr_in *)malloc(
sizeof(struct ::sockaddr_in));
85 memcpy(broadcast_addr, datagram_socket.broadcast_addr,
sizeof(struct ::sockaddr_in));
97 broadcast_addr = (struct ::sockaddr_in *)malloc(
sizeof(struct ::sockaddr_in));
98 memcpy(broadcast_addr, s.broadcast_addr,
sizeof(struct ::sockaddr_in));
109 if (setsockopt(
sock_fd, SOL_SOCKET, SO_BROADCAST, &broadcast,
sizeof(broadcast)) == -1) {
114 if (setsockopt(
sock_fd, SOL_SOCKET, SO_REUSEADDR, &reuse,
sizeof(reuse)) == -1) {
118 struct ::sockaddr_in local;
119 local.sin_family = AF_INET;
120 local.sin_addr.s_addr = INADDR_ANY;
121 local.sin_port = broadcast_addr->sin_port;
123 if (::
bind(
sock_fd, (struct ::sockaddr *)&local,
sizeof(local)) < 0) {
131 broadcast_addr->sin_port = htons(port);
139 free(broadcast_addr);
140 broadcast_addr = (struct ::sockaddr_in *)malloc(
sizeof(struct ::sockaddr_in));
143 if (inet_aton(hostname, &a) == -1) {
146 broadcast_addr->sin_family = AF_INET;
147 broadcast_addr->sin_addr.s_addr = a.s_addr;
148 broadcast_addr->sin_port = htons(port);
172 Socket::send(buf, buf_len, (struct ::sockaddr *)broadcast_addr,
sizeof(struct ::sockaddr_in));
174 e.
append(
"BroadcastDatagramSocket::send(void*, unsigned int) failed");