introduce setsockopt_reuseaddr(int fd), setsockopt_broadcast(int fd),
use them where appropriate. 200 bytes saved
diff --git a/include/libbb.h b/include/libbb.h
index c30c5a7..c96ef6f 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -244,6 +244,8 @@
} sockaddr_inet;
extern int dotted2sockaddr(const char *dotted, struct sockaddr* sp, int socklen);
extern int create_and_bind_socket_ip4or6(const char *hostaddr, int port);
+extern int setsockopt_reuseaddr(int fd);
+extern int setsockopt_broadcast(int fd);
extern char *xstrdup(const char *s);
diff --git a/libbb/xconnect.c b/libbb/xconnect.c
index 9f95e38..b856480 100644
--- a/libbb/xconnect.c
+++ b/libbb/xconnect.c
@@ -67,6 +67,16 @@
return s;
}
+static const int one = 1;
+int setsockopt_reuseaddr(int fd)
+{
+ return setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));
+}
+int setsockopt_broadcast(int fd)
+{
+ return setsockopt(fd, SOL_SOCKET, SO_BROADCAST, &one, sizeof(one));
+}
+
int dotted2sockaddr(const char *dotted, struct sockaddr* sp, int socklen)
{
union {
@@ -116,7 +126,6 @@
int create_and_bind_socket_ip4or6(const char *hostaddr, int port)
{
- static const int on = 1;
int fd;
sockaddr_inet sa;
@@ -128,7 +137,7 @@
fd = xsocket(sa.sa.sa_family, SOCK_STREAM, 0);
} else
fd = xsocket_stream_ip4or6(&sa.sa.sa_family);
- setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
+ setsockopt_reuseaddr(fd);
/* if (port >= 0) { */
#if ENABLE_FEATURE_IPV6
diff --git a/networking/arping.c b/networking/arping.c
index e4c9b86..2d92bf4 100644
--- a/networking/arping.c
+++ b/networking/arping.c
@@ -354,7 +354,7 @@
bb_error_msg_and_die("bind");
}
} else if (!(cfg&dad)) {
- int on = 1;
+ static const int on = 1;
socklen_t alen = sizeof(saddr);
saddr.sin_port = htons(1025);
diff --git a/networking/dnsd.c b/networking/dnsd.c
index 6f9dc5d..5e9cf52 100644
--- a/networking/dnsd.c
+++ b/networking/dnsd.c
@@ -200,12 +200,9 @@
struct sockaddr_in a;
char msg[100];
int s;
- int yes = 1;
s = xsocket(PF_INET, SOCK_DGRAM, 0);
-#ifdef SO_REUSEADDR
- if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *)&yes, sizeof(yes)) < 0)
+ if (setsockopt_reuseaddr(s) < 0)
bb_perror_msg_and_die("setsockopt() failed");
-#endif
memset(&a, 0, sizeof(a));
a.sin_port = htons(listen_port);
a.sin_family = AF_INET;
diff --git a/networking/ether-wake.c b/networking/ether-wake.c
index cc2fb62..f870f6a 100644
--- a/networking/ether-wake.c
+++ b/networking/ether-wake.c
@@ -175,8 +175,7 @@
/* This is necessary for broadcasts to work */
if (flags /*& 1 [OPT_BROADCAST]*/) {
- int one = 1;
- if (setsockopt(s, SOL_SOCKET, SO_BROADCAST, (void *)&one, sizeof(one)) < 0)
+ if (setsockopt_broadcast(s) < 0)
bb_perror_msg("SO_BROADCAST");
}
diff --git a/networking/fakeidentd.c b/networking/fakeidentd.c
index 0e543e7..04138cc 100644
--- a/networking/fakeidentd.c
+++ b/networking/fakeidentd.c
@@ -77,17 +77,16 @@
int s, port;
struct sockaddr_in addr;
int len = sizeof(addr);
- int one = 1;
struct servent *se;
- if ((se = getservbyname("identd", "tcp")) == NULL)
- port = IDENT_PORT;
- else
+ se = getservbyname("identd", "tcp");
+ port = IDENT_PORT;
+ if (se)
port = se->s_port;
s = xsocket(AF_INET, SOCK_STREAM, 0);
- setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));
+ setsockopt_reuseaddr(s);
memset(&addr, 0, sizeof(addr));
addr.sin_addr.s_addr = inet_addr(bind_ip_address);
diff --git a/networking/httpd.c b/networking/httpd.c
index b82e9f9..97b04fb 100644
--- a/networking/httpd.c
+++ b/networking/httpd.c
@@ -802,7 +802,6 @@
{
struct sockaddr_in lsocket;
int fd;
- int on = 1;
/* create the socket right now */
/* inet_addr() returns a value that is already in network order */
@@ -814,9 +813,13 @@
/* tell the OS it's OK to reuse a previous address even though */
/* it may still be in a close down state. Allows bind to succeed. */
#ifdef SO_REUSEPORT
- setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, (void *)&on, sizeof(on));
+ {
+ static const int on = 1;
+ setsockopt(fd, SOL_SOCKET, SO_REUSEPORT,
+ (void *)&on, sizeof(on));
+ }
#else
- setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (void *)&on, sizeof(on));
+ setsockopt_reuseaddr(fd);
#endif
xbind(fd, (struct sockaddr *)&lsocket, sizeof(lsocket));
xlisten(fd, 9);
diff --git a/networking/inetd.c b/networking/inetd.c
index 75b2b14..ec7b2e8 100644
--- a/networking/inetd.c
+++ b/networking/inetd.c
@@ -419,7 +419,6 @@
static void setup(servtab_t *sep)
{
- int on = 1;
int r;
sep->se_fd = socket(sep->se_family, sep->se_socktype, 0);
@@ -427,11 +426,8 @@
bb_perror_msg("%s/%s: socket", sep->se_service, sep->se_proto);
return;
}
-#define turnon(fd, opt) \
-setsockopt(fd, SOL_SOCKET, opt, (char *)&on, sizeof(on))
- if (turnon(sep->se_fd, SO_REUSEADDR) < 0)
+ if (setsockopt_reuseaddr(sep->se_fd) < 0)
bb_perror_msg("setsockopt(SO_REUSEADDR)");
-#undef turnon
#ifdef CONFIG_FEATURE_INETD_RPC
if (isrpcservice(sep)) {
diff --git a/networking/nc.c b/networking/nc.c
index 2f8a36b..5fd9242 100644
--- a/networking/nc.c
+++ b/networking/nc.c
@@ -85,8 +85,7 @@
if (!cfd) {
sfd = xsocket(AF_INET, SOCK_STREAM, 0);
fcntl(sfd, F_SETFD, FD_CLOEXEC);
- opt = 1;
- setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
+ setsockopt_reuseaddr(sfd);
address.sin_family = AF_INET;
// Set local port.
diff --git a/networking/ping.c b/networking/ping.c
index 400d565..fc01b5e 100644
--- a/networking/ping.c
+++ b/networking/ping.c
@@ -351,9 +351,7 @@
memcpy(&pingaddr.sin_addr, hostent->h_addr, sizeof(pingaddr.sin_addr));
/* enable broadcast pings */
- sockopt = 1;
- setsockopt(pingsock, SOL_SOCKET, SO_BROADCAST, (char *) &sockopt,
- sizeof(sockopt));
+ setsockopt_broadcast(pingsock);
/* set recv buf for broadcast pings */
sockopt = 48 * 1024;
diff --git a/networking/ping6.c b/networking/ping6.c
index 6ab9ce0..9f0509e 100644
--- a/networking/ping6.c
+++ b/networking/ping6.c
@@ -356,9 +356,7 @@
#endif /*ICMP6_FILTER*/
/* enable broadcast pings */
- sockopt = 1;
- setsockopt(pingsock, SOL_SOCKET, SO_BROADCAST, (char *) &sockopt,
- sizeof(sockopt));
+ setsockopt_broadcast(pingsock);
/* set recv buf for broadcast pings */
sockopt = 48 * 1024;
diff --git a/networking/telnet.c b/networking/telnet.c
index 628e2e6..6085d88 100644
--- a/networking/telnet.c
+++ b/networking/telnet.c
@@ -103,7 +103,7 @@
static int subneg(byte c);
/* Some globals */
-static int one = 1;
+static const int one = 1;
#ifdef CONFIG_FEATURE_TELNET_TTYPE
static char *ttype;
diff --git a/networking/traceroute.c b/networking/traceroute.c
index c4f050a..4900765 100644
--- a/networking/traceroute.c
+++ b/networking/traceroute.c
@@ -888,13 +888,14 @@
int
traceroute_main(int argc, char *argv[])
{
+ static const int on = 1;
+
int code, n;
unsigned char *outp;
u_int32_t *ap;
struct sockaddr_in *from = (struct sockaddr_in *)&wherefrom;
struct sockaddr_in *to = (struct sockaddr_in *)&whereto;
struct hostinfo *hi;
- int on = 1;
int ttl, probe, i;
int seq = 0;
int tos = 0;
diff --git a/networking/udhcp/arpping.c b/networking/udhcp/arpping.c
index 471e36d..9c8b9c5 100644
--- a/networking/udhcp/arpping.c
+++ b/networking/udhcp/arpping.c
@@ -44,9 +44,7 @@
/* FIXME: match response against chaddr */
int arpping(uint32_t yiaddr, uint32_t ip, uint8_t *mac, char *interface)
{
-
int timeout = 2;
- int optval = 1;
int s; /* socket */
int rv = 1; /* return value */
struct sockaddr addr; /* for interface name */
@@ -56,12 +54,13 @@
time_t prevTime;
- if ((s = socket(PF_PACKET, SOCK_PACKET, htons(ETH_P_ARP))) == -1) {
+ s = socket(PF_PACKET, SOCK_PACKET, htons(ETH_P_ARP));
+ if (s == -1) {
bb_perror_msg(bb_msg_can_not_create_raw_socket);
return -1;
}
- if (setsockopt(s, SOL_SOCKET, SO_BROADCAST, &optval, sizeof(optval)) == -1) {
+ if (setsockopt_broadcast(s) == -1) {
bb_perror_msg("cannot setsocketopt on raw socket");
close(s);
return -1;
diff --git a/networking/udhcp/packet.c b/networking/udhcp/packet.c
index 8591044..dec9d0a 100644
--- a/networking/udhcp/packet.c
+++ b/networking/udhcp/packet.c
@@ -173,7 +173,6 @@
uint32_t source_ip, int source_port,
uint32_t dest_ip, int dest_port)
{
- int n = 1;
int fd, result;
struct sockaddr_in client;
@@ -181,7 +180,7 @@
if (fd < 0)
return -1;
- if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *) &n, sizeof(n)) == -1) {
+ if (setsockopt_reuseaddr(fd) == -1) {
close(fd);
return -1;
}
diff --git a/networking/udhcp/socket.c b/networking/udhcp/socket.c
index c19131d..b27dca3 100644
--- a/networking/udhcp/socket.c
+++ b/networking/udhcp/socket.c
@@ -93,7 +93,6 @@
struct ifreq interface;
int fd;
struct sockaddr_in addr;
- int n = 1;
DEBUG("Opening listen socket on 0x%08x:%d %s", ip, port, inf);
fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
@@ -107,17 +106,17 @@
addr.sin_port = htons(port);
addr.sin_addr.s_addr = ip;
- if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *) &n, sizeof(n)) == -1) {
+ if (setsockopt_reuseaddr(fd) == -1) {
close(fd);
return -1;
}
- if (setsockopt(fd, SOL_SOCKET, SO_BROADCAST, (char *) &n, sizeof(n)) == -1) {
+ if (setsockopt_broadcast(fd) == -1) {
close(fd);
return -1;
}
strncpy(interface.ifr_name, inf, IFNAMSIZ);
- if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE,(char *)&interface, sizeof(interface)) < 0) {
+ if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, (char *)&interface, sizeof(interface)) < 0) {
close(fd);
return -1;
}