svn commit: trunk/busybox: include libbb networking

aldot at busybox.net aldot at busybox.net
Wed Apr 12 18:24:40 UTC 2006


Author: aldot
Date: 2006-04-12 11:24:37 -0700 (Wed, 12 Apr 2006)
New Revision: 14836

Log:
- patch from Denis Vlasenko to add bb_xbind() and bb_xlisten()


Added:
   trunk/busybox/libbb/bb_xbind.c
   trunk/busybox/libbb/bb_xlisten.c

Modified:
   trunk/busybox/include/libbb.h
   trunk/busybox/libbb/Makefile.in
   trunk/busybox/networking/dnsd.c
   trunk/busybox/networking/fakeidentd.c
   trunk/busybox/networking/httpd.c
   trunk/busybox/networking/nc.c
   trunk/busybox/networking/telnetd.c
   trunk/busybox/networking/traceroute.c


Changeset:
Modified: trunk/busybox/include/libbb.h
===================================================================
--- trunk/busybox/include/libbb.h	2006-04-12 18:17:00 UTC (rev 14835)
+++ trunk/busybox/include/libbb.h	2006-04-12 18:24:37 UTC (rev 14836)
@@ -147,6 +147,8 @@
 extern void xstat(const char *filename, struct stat *buf);
 extern int  bb_xsocket(int domain, int type, int protocol);
 extern void bb_xdaemon(int nochdir, int noclose);
+extern void bb_xbind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);
+extern void bb_xlisten(int s, int backlog);
 
 #define BB_GETOPT_ERROR 0x80000000UL
 extern const char *bb_opt_complementally;

Modified: trunk/busybox/libbb/Makefile.in
===================================================================
--- trunk/busybox/libbb/Makefile.in	2006-04-12 18:17:00 UTC (rev 14835)
+++ trunk/busybox/libbb/Makefile.in	2006-04-12 18:24:37 UTC (rev 14836)
@@ -30,7 +30,7 @@
 	trim.c u_signal_names.c vdprintf.c verror_msg.c \
 	vherror_msg.c vperror_msg.c wfopen.c xconnect.c xgetcwd.c xstat.c \
 	xgethostbyname.c xgethostbyname2.c xreadlink.c xregcomp.c xgetlarg.c \
-	bb_xsocket.c bb_xdaemon.c \
+	bb_xsocket.c bb_xdaemon.c bb_xbind.c bb_xlisten.c \
 	get_terminal_width_height.c fclose_nonstdin.c fflush_stdout_and_exit.c \
 	getopt_ulflags.c default_error_retval.c wfopen_input.c speed_table.c \
 	perror_nomsg_and_die.c perror_nomsg.c skip_whitespace.c bb_askpass.c \

Added: trunk/busybox/libbb/bb_xbind.c
===================================================================
--- trunk/busybox/libbb/bb_xbind.c	2006-04-12 18:17:00 UTC (rev 14835)
+++ trunk/busybox/libbb/bb_xbind.c	2006-04-12 18:24:37 UTC (rev 14836)
@@ -0,0 +1,18 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * bb_xbind.c - a bind() which dies on failure with error message
+ *
+ * Copyright (C) 2006 Denis Vlasenko
+ *
+ * Licensed under LGPL, see file docs/lesser.txt in this tarball for details.
+ */
+#include <sys/types.h>
+#include <sys/socket.h>
+#include "libbb.h"
+
+void bb_xbind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen)
+{
+	if (bind(sockfd, my_addr, addrlen))
+		bb_perror_msg_and_die("bind");
+}
+

Added: trunk/busybox/libbb/bb_xlisten.c
===================================================================
--- trunk/busybox/libbb/bb_xlisten.c	2006-04-12 18:17:00 UTC (rev 14835)
+++ trunk/busybox/libbb/bb_xlisten.c	2006-04-12 18:24:37 UTC (rev 14836)
@@ -0,0 +1,17 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * bb_xlisten.c - a listen() which dies on failure with error message
+ *
+ * Copyright (C) 2006 Denis Vlasenko
+ *
+ * Licensed under LGPL, see file docs/lesser.txt in this tarball for details.
+ */
+#include <sys/socket.h>
+#include "libbb.h"
+
+void bb_xlisten(int s, int backlog)
+{
+	if (listen(s, backlog))
+		bb_perror_msg_and_die("listen");
+}
+

Modified: trunk/busybox/networking/dnsd.c
===================================================================
--- trunk/busybox/networking/dnsd.c	2006-04-12 18:17:00 UTC (rev 14835)
+++ trunk/busybox/networking/dnsd.c	2006-04-12 18:24:37 UTC (rev 14836)
@@ -216,9 +216,8 @@
 	a.sin_family = AF_INET;
 	if (!inet_aton(iface_addr, &a.sin_addr))
 		bb_perror_msg_and_die("bad iface address");
-	if (bind(s, (struct sockaddr *)&a, sizeof(a)) < 0)
-		bb_perror_msg_and_die("bind() failed");
-	listen(s, 50);
+	bb_xbind(s, (struct sockaddr *)&a, sizeof(a));
+	listen(s, 50); /* bb_xlisten? */
 	sprintf(msg, "accepting UDP packets on addr:port %s:%d\n",
 		iface_addr, (int)listen_port);
 	log_message(LOG_FILE, msg);

Modified: trunk/busybox/networking/fakeidentd.c
===================================================================
--- trunk/busybox/networking/fakeidentd.c	2006-04-12 18:17:00 UTC (rev 14835)
+++ trunk/busybox/networking/fakeidentd.c	2006-04-12 18:24:37 UTC (rev 14836)
@@ -113,10 +113,10 @@
 	addr.sin_family = AF_INET;
 	addr.sin_port = htons(port);
 
-	if (bind(s, (struct sockaddr *)&addr, len) < 0)
+	if (bind(s, (struct sockaddr *)&addr, len) < 0) /* bb_xbind? */
 		bb_perror_msg_and_die("Cannot bind() port %i", IDENT_PORT);
 
-	if (listen(s, 5) < 0)
+	if (listen(s, 5) < 0) /* bb_xlisten? */
 		bb_perror_msg_and_die("Cannot listen() on port %i", IDENT_PORT);
 
 	movefd(s, 0);

Modified: trunk/busybox/networking/httpd.c
===================================================================
--- trunk/busybox/networking/httpd.c	2006-04-12 18:17:00 UTC (rev 14835)
+++ trunk/busybox/networking/httpd.c	2006-04-12 18:24:37 UTC (rev 14836)
@@ -958,12 +958,9 @@
 #else
   setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (void *)&on, sizeof(on)) ;
 #endif
-  if (bind(fd, (struct sockaddr *)&lsocket, sizeof(lsocket)) == 0) {
-    listen(fd, 9);
-    signal(SIGCHLD, SIG_IGN);   /* prevent zombie (defunct) processes */
-  } else {
-    bb_perror_msg_and_die("bind");
-  }
+  bb_xbind(fd, (struct sockaddr *)&lsocket, sizeof(lsocket));
+  listen(fd, 9); /* bb_xlisten? */
+  signal(SIGCHLD, SIG_IGN);   /* prevent zombie (defunct) processes */
   return fd;
 }
 #endif  /* CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY */

Modified: trunk/busybox/networking/nc.c
===================================================================
--- trunk/busybox/networking/nc.c	2006-04-12 18:17:00 UTC (rev 14835)
+++ trunk/busybox/networking/nc.c	2006-04-12 18:24:37 UTC (rev 14836)
@@ -90,16 +90,13 @@
 		memset(&address.sin_addr, 0, sizeof(address.sin_addr));
 		address.sin_port = lport;
 
-		if (bind(sfd, (struct sockaddr *) &address, sizeof(address)) < 0)
-			bb_perror_msg_and_die("bind");
+		bb_xbind(sfd, (struct sockaddr *) &address, sizeof(address));
 	}
 
 	if (do_listen) {
 		socklen_t addrlen = sizeof(address);
 
-		if (listen(sfd, 1) < 0)
-			bb_perror_msg_and_die("listen");
-
+		bb_xlisten(sfd, 1);
 		if ((tmpfd = accept(sfd, (struct sockaddr *) &address, &addrlen)) < 0)
 			bb_perror_msg_and_die("accept");
 

Modified: trunk/busybox/networking/telnetd.c
===================================================================
--- trunk/busybox/networking/telnetd.c	2006-04-12 18:17:00 UTC (rev 14835)
+++ trunk/busybox/networking/telnetd.c	2006-04-12 18:24:37 UTC (rev 14836)
@@ -461,14 +461,8 @@
 	sa.sin_addr = bind_addr;
 #endif
 
-	if (bind(master_fd, (struct sockaddr *) &sa, sizeof(sa)) < 0) {
-		bb_perror_msg_and_die("bind");
-	}
-
-	if (listen(master_fd, 1) < 0) {
-		bb_perror_msg_and_die("listen");
-	}
-
+	bb_xbind(master_fd, (struct sockaddr *) &sa, sizeof(sa));
+	bb_xlisten(master_fd, 1);
 	bb_xdaemon(0, 0);
 
 	maxfd = master_fd;

Modified: trunk/busybox/networking/traceroute.c
===================================================================
--- trunk/busybox/networking/traceroute.c	2006-04-12 18:17:00 UTC (rev 14835)
+++ trunk/busybox/networking/traceroute.c	2006-04-12 18:24:37 UTC (rev 14836)
@@ -1253,9 +1253,7 @@
 
 	outip->ip_src = from->sin_addr;
 #ifndef IP_HDRINCL
-	if (bind(sndsock, (struct sockaddr *)from, sizeof(*from)) < 0) {
-		bb_perror_msg_and_die("bind");
-	}
+	bb_xbind(sndsock, (struct sockaddr *)from, sizeof(*from));
 #endif
 
 	fprintf(stderr, "traceroute to %s (%s)", hostname, inet_ntoa(to->sin_addr));




More information about the busybox-cvs mailing list