libbb: add setsockopt_foo helpers

function                                             old     new   delta
setsockopt_int                                         -      23     +23
do_load                                              918     934     +16
setsockopt_SOL_SOCKET_int                              -      14     +14
setsockopt_keepalive                                   -      10     +10
setsockopt_SOL_SOCKET_1                                -      10     +10
buffer_fill_and_print                                169     178      +9
setsockopt_1                                           -       8      +8
nfsmount                                            3560    3566      +6
redirect                                            1277    1282      +5
tcpudpsvd_main                                      1782    1786      +4
d6_send_kernel_packet                                272     275      +3
i2cget_main                                          380     382      +2
ed_main                                             2544    2545      +1
scan_recursive                                       380     378      -2
nbdclient_main                                       492     490      -2
hash_find                                            235     233      -2
cmdputs                                              334     332      -2
parse_command                                       1443    1440      -3
static.two                                             4       -      -4
ntpd_main                                           1039    1035      -4
const_int_1                                            4       -      -4
const_IPTOS_LOWDELAY                                   4       -      -4
RCVBUF                                                 4       -      -4
ntp_init                                             474     469      -5
change_listen_mode                                   316     310      -6
uevent_main                                          416     409      -7
arping_main                                         1697    1690      -7
telnet_main                                         1612    1603      -9
socket_want_pktinfo                                   42      33      -9
setsockopt_reuseaddr                                  21      10     -11
setsockopt_broadcast                                  21      10     -11
httpd_main                                           772     757     -15
get_remote_transfer_fd                               109      94     -15
make_new_session                                     503     487     -16
ftpd_main                                           2177    2160     -17
read_bunzip                                         1896    1866     -30
common_traceroute_main                              4099    4058     -41
common_ping_main                                    1836    1783     -53
------------------------------------------------------------------------------
(add/remove: 5/4 grow/shrink: 8/21 up/down: 111/-283)        Total: -172 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
diff --git a/networking/arping.c b/networking/arping.c
index 9ac4a7c..ce7fa29 100644
--- a/networking/arping.c
+++ b/networking/arping.c
@@ -357,7 +357,7 @@
 			saddr.sin_port = htons(1025);
 			saddr.sin_addr = dst;
 
-			if (setsockopt(probe_fd, SOL_SOCKET, SO_DONTROUTE, &const_int_1, sizeof(const_int_1)) == -1)
+			if (setsockopt_SOL_SOCKET_1(probe_fd, SO_DONTROUTE) != 0)
 				bb_perror_msg("setsockopt(%s)", "SO_DONTROUTE");
 			xconnect(probe_fd, (struct sockaddr *) &saddr, sizeof(saddr));
 			getsockname(probe_fd, (struct sockaddr *) &saddr, &alen);
diff --git a/networking/ftpd.c b/networking/ftpd.c
index 2351d6d..7735b72 100644
--- a/networking/ftpd.c
+++ b/networking/ftpd.c
@@ -377,7 +377,7 @@
 		return remote_fd;
 	}
 
-	setsockopt(remote_fd, SOL_SOCKET, SO_KEEPALIVE, &const_int_1, sizeof(const_int_1));
+	setsockopt_keepalive(remote_fd);
 	return remote_fd;
 }
 
@@ -1186,11 +1186,11 @@
 		, SIG_IGN);
 
 	/* Set up options on the command socket (do we need these all? why?) */
-	setsockopt(STDIN_FILENO, IPPROTO_TCP, TCP_NODELAY, &const_int_1, sizeof(const_int_1));
-	setsockopt(STDIN_FILENO, SOL_SOCKET, SO_KEEPALIVE, &const_int_1, sizeof(const_int_1));
+	setsockopt_1(STDIN_FILENO, IPPROTO_TCP, TCP_NODELAY);
+	setsockopt_keepalive(STDIN_FILENO);
 	/* Telnet protocol over command link may send "urgent" data,
 	 * we prefer it to be received in the "normal" data stream: */
-	setsockopt(STDIN_FILENO, SOL_SOCKET, SO_OOBINLINE, &const_int_1, sizeof(const_int_1));
+	setsockopt_1(STDIN_FILENO, SOL_SOCKET, SO_OOBINLINE);
 
 	WRITE_OK(FTP_GREET);
 	signal(SIGALRM, timeout_handler);
diff --git a/networking/httpd.c b/networking/httpd.c
index 7a9065f..feaaa94 100644
--- a/networking/httpd.c
+++ b/networking/httpd.c
@@ -2352,7 +2352,7 @@
 			continue;
 
 		/* set the KEEPALIVE option to cull dead connections */
-		setsockopt(n, SOL_SOCKET, SO_KEEPALIVE, &const_int_1, sizeof(const_int_1));
+		setsockopt_keepalive(n);
 
 		if (fork() == 0) {
 			/* child */
@@ -2395,7 +2395,7 @@
 			continue;
 
 		/* set the KEEPALIVE option to cull dead connections */
-		setsockopt(n, SOL_SOCKET, SO_KEEPALIVE, &const_int_1, sizeof(const_int_1));
+		setsockopt_keepalive(n);
 
 		if (vfork() == 0) {
 			/* child */
diff --git a/networking/nbd-client.c b/networking/nbd-client.c
index cadda52..a601430 100644
--- a/networking/nbd-client.c
+++ b/networking/nbd-client.c
@@ -83,7 +83,7 @@
 
 		// Find and connect to server
 		sock = create_and_connect_stream_or_die(host, xatou16(port));
-		setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &const_int_1, sizeof(const_int_1));
+		setsockopt_1(sock, IPPROTO_TCP, TCP_NODELAY);
 
 		// Log on to the server
 		xread(sock, &nbd_header, 8+8+8+4 + 124);
diff --git a/networking/nc_bloaty.c b/networking/nc_bloaty.c
index b28d05f..471ae1a 100644
--- a/networking/nc_bloaty.c
+++ b/networking/nc_bloaty.c
@@ -863,8 +863,8 @@
 		xbind(netfd, &ouraddr->u.sa, ouraddr->len);
 	}
 #if 0
-	setsockopt(netfd, SOL_SOCKET, SO_RCVBUF, &o_rcvbuf, sizeof o_rcvbuf);
-	setsockopt(netfd, SOL_SOCKET, SO_SNDBUF, &o_sndbuf, sizeof o_sndbuf);
+	setsockopt_SOL_SOCKET_int(netfd, SO_RCVBUF, o_rcvbuf);
+	setsockopt_SOL_SOCKET_int(netfd, SO_SNDBUF, o_sndbuf);
 #endif
 
 #ifdef BLOAT
diff --git a/networking/ntpd.c b/networking/ntpd.c
index b5120a7..9732c9b 100644
--- a/networking/ntpd.c
+++ b/networking/ntpd.c
@@ -405,8 +405,6 @@
 };
 #define G (*ptr_to_globals)
 
-static const int const_IPTOS_LOWDELAY = IPTOS_LOWDELAY;
-
 
 #define VERB1 if (MAX_VERBOSE && G.verbose)
 #define VERB2 if (MAX_VERBOSE >= 2 && G.verbose >= 2)
@@ -837,7 +835,7 @@
 #if ENABLE_FEATURE_IPV6
 		if (family == AF_INET)
 #endif
-			setsockopt(fd, IPPROTO_IP, IP_TOS, &const_IPTOS_LOWDELAY, sizeof(const_IPTOS_LOWDELAY));
+			setsockopt_int(fd, IPPROTO_IP, IP_TOS, IPTOS_LOWDELAY);
 		free(local_lsa);
 	}
 
@@ -2186,7 +2184,7 @@
 				xfunc_die();
 		}
 		socket_want_pktinfo(G_listen_fd);
-		setsockopt(G_listen_fd, IPPROTO_IP, IP_TOS, &const_IPTOS_LOWDELAY, sizeof(const_IPTOS_LOWDELAY));
+		setsockopt_int(G_listen_fd, IPPROTO_IP, IP_TOS, IPTOS_LOWDELAY);
 	}
 #endif
 	if (!(opts & OPT_n)) {
diff --git a/networking/ping.c b/networking/ping.c
index 20489a0..e1f9ebc 100644
--- a/networking/ping.c
+++ b/networking/ping.c
@@ -247,7 +247,7 @@
 	pkt->icmp6_type = ICMP6_ECHO_REQUEST;
 
 	sockopt = offsetof(struct icmp6_hdr, icmp6_cksum);
-	setsockopt(pingsock, SOL_RAW, IPV6_CHECKSUM, &sockopt, sizeof(sockopt));
+	setsockopt_int(pingsock, SOL_RAW, IPV6_CHECKSUM, sockopt);
 
 	xsendto(pingsock, G.packet, DEFDATALEN + sizeof(struct icmp6_hdr), &lsa->u.sa, lsa->len);
 
@@ -700,12 +700,12 @@
 	/* set recv buf (needed if we can get lots of responses: flood ping,
 	 * broadcast ping etc) */
 	sockopt = (datalen * 2) + 7 * 1024; /* giving it a bit of extra room */
-	setsockopt(pingsock, SOL_SOCKET, SO_RCVBUF, &sockopt, sizeof(sockopt));
+	setsockopt_SOL_SOCKET_int(pingsock, SO_RCVBUF, sockopt);
 
 	if (opt_ttl != 0) {
-		setsockopt(pingsock, IPPROTO_IP, IP_TTL, &opt_ttl, sizeof(opt_ttl));
+		setsockopt_int(pingsock, IPPROTO_IP, IP_TTL, opt_ttl);
 		/* above doesnt affect packets sent to bcast IP, so... */
-		setsockopt(pingsock, IPPROTO_IP, IP_MULTICAST_TTL, &opt_ttl, sizeof(opt_ttl));
+		setsockopt_int(pingsock, IPPROTO_IP, IP_MULTICAST_TTL, opt_ttl);
 	}
 
 	signal(SIGINT, print_stats_and_exit);
@@ -766,15 +766,15 @@
 	/* set recv buf (needed if we can get lots of responses: flood ping,
 	 * broadcast ping etc) */
 	sockopt = (datalen * 2) + 7 * 1024; /* giving it a bit of extra room */
-	setsockopt(pingsock, SOL_SOCKET, SO_RCVBUF, &sockopt, sizeof(sockopt));
+	setsockopt_SOL_SOCKET_int(pingsock, SO_RCVBUF, sockopt);
 
 	sockopt = offsetof(struct icmp6_hdr, icmp6_cksum);
-	if (offsetof(struct icmp6_hdr, icmp6_cksum) != 2)
+	if (sockopt != 2)
 		BUG_bad_offsetof_icmp6_cksum();
-	setsockopt(pingsock, SOL_RAW, IPV6_CHECKSUM, &sockopt, sizeof(sockopt));
+	setsockopt_int(pingsock, SOL_RAW, IPV6_CHECKSUM, sockopt);
 
 	/* request ttl info to be returned in ancillary data */
-	setsockopt(pingsock, SOL_IPV6, IPV6_HOPLIMIT, &const_int_1, sizeof(const_int_1));
+	setsockopt_1(pingsock, SOL_IPV6, IPV6_HOPLIMIT);
 
 	if (if_index)
 		pingaddr.sin6.sin6_scope_id = if_index;
diff --git a/networking/telnet.c b/networking/telnet.c
index a255797..3bb6fb1 100644
--- a/networking/telnet.c
+++ b/networking/telnet.c
@@ -623,7 +623,7 @@
 
 	xmove_fd(create_and_connect_stream_or_die(host, port), netfd);
 
-	setsockopt(netfd, SOL_SOCKET, SO_KEEPALIVE, &const_int_1, sizeof(const_int_1));
+	setsockopt_keepalive(netfd);
 
 	signal(SIGINT, record_signo);
 
diff --git a/networking/telnetd.c b/networking/telnetd.c
index 6aee958..25d05fe 100644
--- a/networking/telnetd.c
+++ b/networking/telnetd.c
@@ -265,7 +265,7 @@
 	close_on_exec_on(fd);
 
 	/* SO_KEEPALIVE by popular demand */
-	setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &const_int_1, sizeof(const_int_1));
+	setsockopt_keepalive(sock);
 #if ENABLE_FEATURE_TELNETD_STANDALONE
 	ts->sockfd_read = sock;
 	ndelay_on(sock);
diff --git a/networking/traceroute.c b/networking/traceroute.c
index e41d89e..642110c 100644
--- a/networking/traceroute.c
+++ b/networking/traceroute.c
@@ -473,8 +473,8 @@
 
 #if ENABLE_TRACEROUTE6
 	if (dest_lsa->u.sa.sa_family == AF_INET6) {
-		res = setsockopt(sndsock, SOL_IPV6, IPV6_UNICAST_HOPS, &ttl, sizeof(ttl));
-		if (res < 0)
+		res = setsockopt_int(sndsock, SOL_IPV6, IPV6_UNICAST_HOPS, ttl);
+		if (res != 0)
 			bb_perror_msg_and_die("setsockopt(%s) %d", "UNICAST_HOPS", ttl);
 		out = outip;
 		len = packlen;
@@ -482,8 +482,8 @@
 #endif
 	{
 #if defined IP_TTL
-		res = setsockopt(sndsock, IPPROTO_IP, IP_TTL, &ttl, sizeof(ttl));
-		if (res < 0)
+		res = setsockopt_int(sndsock, IPPROTO_IP, IP_TTL, ttl);
+		if (res != 0)
 			bb_perror_msg_and_die("setsockopt(%s) %d", "TTL", ttl);
 #endif
 		out = outicmp;
@@ -902,13 +902,10 @@
 	if (af == AF_INET6) {
 		xmove_fd(xsocket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6), rcvsock);
 # ifdef IPV6_RECVPKTINFO
-		setsockopt(rcvsock, SOL_IPV6, IPV6_RECVPKTINFO,
-				&const_int_1, sizeof(const_int_1));
-		setsockopt(rcvsock, SOL_IPV6, IPV6_2292PKTINFO,
-				&const_int_1, sizeof(const_int_1));
+		setsockopt_1(rcvsock, SOL_IPV6, IPV6_RECVPKTINFO);
+		setsockopt_1(rcvsock, SOL_IPV6, IPV6_2292PKTINFO);
 # else
-		setsockopt(rcvsock, SOL_IPV6, IPV6_PKTINFO,
-				&const_int_1, sizeof(const_int_1));
+		setsockopt_1(rcvsock, SOL_IPV6, IPV6_PKTINFO);
 # endif
 	} else
 #endif
@@ -918,17 +915,14 @@
 
 #if TRACEROUTE_SO_DEBUG
 	if (op & OPT_DEBUG)
-		setsockopt(rcvsock, SOL_SOCKET, SO_DEBUG,
-				&const_int_1, sizeof(const_int_1));
+		setsockopt_SOL_SOCKET_1(rcvsock, SO_DEBUG);
 #endif
 	if (op & OPT_BYPASS_ROUTE)
-		setsockopt(rcvsock, SOL_SOCKET, SO_DONTROUTE,
-				&const_int_1, sizeof(const_int_1));
+		setsockopt_SOL_SOCKET_1(rcvsock, SO_DONTROUTE);
 
 #if ENABLE_TRACEROUTE6
 	if (af == AF_INET6) {
-		static const int two = 2;
-		if (setsockopt(rcvsock, SOL_RAW, IPV6_CHECKSUM, &two, sizeof(two)) < 0)
+		if (setsockopt_int(rcvsock, SOL_RAW, IPV6_CHECKSUM, 2) != 0)
 			bb_perror_msg_and_die("setsockopt(%s)", "IPV6_CHECKSUM");
 		xmove_fd(xsocket(af, SOCK_DGRAM, 0), sndsock);
 	} else
@@ -966,28 +960,25 @@
 	}
 
 #ifdef SO_SNDBUF
-	if (setsockopt(sndsock, SOL_SOCKET, SO_SNDBUF, &packlen, sizeof(packlen)) < 0) {
-		bb_perror_msg_and_die("SO_SNDBUF");
+	if (setsockopt_SOL_SOCKET_int(sndsock, SO_SNDBUF, packlen) != 0) {
+		bb_perror_msg_and_die("setsockopt(%s)", "SO_SNDBUF");
 	}
 #endif
 #ifdef IP_TOS
-	if ((op & OPT_TOS) && setsockopt(sndsock, IPPROTO_IP, IP_TOS, &tos, sizeof(tos)) < 0) {
+	if ((op & OPT_TOS) && setsockopt_int(sndsock, IPPROTO_IP, IP_TOS, tos) != 0) {
 		bb_perror_msg_and_die("setsockopt(%s) %d", "TOS", tos);
 	}
 #endif
 #ifdef IP_DONTFRAG
 	if (op & OPT_DONT_FRAGMNT)
-		setsockopt(sndsock, IPPROTO_IP, IP_DONTFRAG,
-				&const_int_1, sizeof(const_int_1));
+		setsockopt_1(sndsock, IPPROTO_IP, IP_DONTFRAG);
 #endif
 #if TRACEROUTE_SO_DEBUG
 	if (op & OPT_DEBUG)
-		setsockopt(sndsock, SOL_SOCKET, SO_DEBUG,
-				&const_int_1, sizeof(const_int_1));
+		setsockopt_SOL_SOCKET_1(sndsock, SO_DEBUG);
 #endif
 	if (op & OPT_BYPASS_ROUTE)
-		setsockopt(sndsock, SOL_SOCKET, SO_DONTROUTE,
-				&const_int_1, sizeof(const_int_1));
+		setsockopt_SOL_SOCKET_1(sndsock, SO_DONTROUTE);
 
 	outip = xzalloc(packlen);
 
diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c
index 811a1a1..11f7b2d 100644
--- a/networking/udhcp/dhcpc.c
+++ b/networking/udhcp/dhcpc.c
@@ -1043,9 +1043,7 @@
 	}
 #endif
 
-	if (setsockopt(fd, SOL_PACKET, PACKET_AUXDATA,
-			&const_int_1, sizeof(int)) < 0
-	) {
+	if (setsockopt_1(fd, SOL_PACKET, PACKET_AUXDATA) != 0) {
 		if (errno != ENOPROTOOPT)
 			log1("Can't set PACKET_AUXDATA on raw socket");
 	}