summaryrefslogtreecommitdiff
path: root/libhw_cr/host_net.c
diff options
context:
space:
mode:
Diffstat (limited to 'libhw_cr/host_net.c')
-rw-r--r--libhw_cr/host_net.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/libhw_cr/host_net.c b/libhw_cr/host_net.c
index 4a2e65f..8016787 100644
--- a/libhw_cr/host_net.c
+++ b/libhw_cr/host_net.c
@@ -376,6 +376,8 @@ void hostnet_udp_conn_init(struct hostnet_udp_conn *self, uint16_t port) {
fd = socket(AF_INET, SOCK_DGRAM, 0);
if (fd < 0)
error(1, errno, "socket");
+ if (setsockopt(fd, SOL_SOCKET, SO_BROADCAST, &(int){1}, sizeof(int)) < 0)
+ error(1, errno, "setsockopt(fd=%d, SO_BROADCAST=1)", fd);
if (bind(fd, &addr.gen, sizeof addr) < 0)
error(1, errno, "bind");
@@ -408,10 +410,10 @@ static void *hostnet_pthread_sendto(void *_args) {
addr.in.sin_family = AF_INET;
addr.in.sin_addr.s_addr =
- (((uint32_t)args->node.octets[0])<<24) |
- (((uint32_t)args->node.octets[1])<<16) |
- (((uint32_t)args->node.octets[2])<< 8) |
- (((uint32_t)args->node.octets[3])<< 0) ;
+ (((uint32_t)args->node.octets[3])<<24) |
+ (((uint32_t)args->node.octets[2])<<16) |
+ (((uint32_t)args->node.octets[1])<< 8) |
+ (((uint32_t)args->node.octets[0])<< 0) ;
addr.in.sin_port = htons(args->port);
*(args->ret) = sendto(args->connfd, args->buf, args->count, 0, &addr.gen, sizeof(addr));
if (*(args->ret) < 0)
@@ -473,7 +475,7 @@ static void *hostnet_pthread_recvfrom(void *_args) {
struct sockaddr gen;
struct sockaddr_storage stor;
} addr = {};
- socklen_t addr_size;
+ socklen_t addr_size = sizeof(addr);
*(args->ret_size) = setsockopt(args->connfd, SOL_SOCKET, SO_RCVTIMEO,
&args->timeout, sizeof(args->timeout));
@@ -487,10 +489,10 @@ static void *hostnet_pthread_recvfrom(void *_args) {
assert(addr.in.sin_family == AF_INET);
if (args->ret_node) {
- args->ret_node->octets[0] = (addr.in.sin_addr.s_addr >> 24) & 0xFF;
- args->ret_node->octets[1] = (addr.in.sin_addr.s_addr >> 16) & 0xFF;
- args->ret_node->octets[2] = (addr.in.sin_addr.s_addr >> 8) & 0xFF;
- args->ret_node->octets[3] = (addr.in.sin_addr.s_addr >> 0) & 0xFF;
+ args->ret_node->octets[3] = (addr.in.sin_addr.s_addr >> 24) & 0xFF;
+ args->ret_node->octets[2] = (addr.in.sin_addr.s_addr >> 16) & 0xFF;
+ args->ret_node->octets[1] = (addr.in.sin_addr.s_addr >> 8) & 0xFF;
+ args->ret_node->octets[0] = (addr.in.sin_addr.s_addr >> 0) & 0xFF;
}
if (args->ret_port) {
(*args->ret_port) = ntohs(addr.in.sin_port);