X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fsocket.c;h=c0139587e38b98d8e7beeafbd1a97f5e667204b3;hb=572481b9094f7f1fbba69f1bd0c8f7db31550b01;hp=e8b2d968d626ba5266d298875b7b54830e39c7e4;hpb=6b6d2deecc246cf9780d31e1cd03a52aa5bfd9d2;p=elogind.git diff --git a/src/socket.c b/src/socket.c index e8b2d968d..c0139587e 100644 --- a/src/socket.c +++ b/src/socket.c @@ -405,6 +405,7 @@ static void socket_dump(Unit *u, FILE *f, const char *prefix) { "%sKeepAlive: %s\n" "%sFreeBind: %s\n" "%sTransparent: %s\n" + "%sBroadcast: %s\n" "%sTCPCongestion: %s\n", prefix, socket_state_to_string(s->state), prefix, socket_address_bind_ipv6_only_to_string(s->bind_ipv6_only), @@ -414,6 +415,7 @@ static void socket_dump(Unit *u, FILE *f, const char *prefix) { prefix, yes_no(s->keep_alive), prefix, yes_no(s->free_bind), prefix, yes_no(s->transparent), + prefix, yes_no(s->broadcast), prefix, strna(s->tcp_congestion)); if (s->control_pid > 0) @@ -649,20 +651,26 @@ static void socket_apply_socket_options(Socket *s, int fd) { log_warning("SO_KEEPALIVE failed: %m"); } + if (s->broadcast) { + int one = 1; + if (setsockopt(fd, SOL_SOCKET, SO_BROADCAST, &one, sizeof(one)) < 0) + log_warning("SO_BROADCAST failed: %m"); + } + if (s->priority >= 0) if (setsockopt(fd, SOL_SOCKET, SO_PRIORITY, &s->priority, sizeof(s->priority)) < 0) log_warning("SO_PRIORITY failed: %m"); if (s->receive_buffer > 0) { int value = (int) s->receive_buffer; - if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &value, sizeof(value)) < 0) - log_warning("SO_RCVBUF failed: %m"); + if (setsockopt(fd, SOL_SOCKET, SO_RCVBUFFORCE, &value, sizeof(value)) < 0) + log_warning("SO_RCVBUFFORCE failed: %m"); } if (s->send_buffer > 0) { int value = (int) s->send_buffer; - if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &value, sizeof(value)) < 0) - log_warning("SO_SNDBUF failed: %m"); + if (setsockopt(fd, SOL_SOCKET, SO_SNDBUFFORCE, &value, sizeof(value)) < 0) + log_warning("SO_SNDBUFFORCE failed: %m"); } if (s->mark >= 0)