changeset 680:84e398270f7f HEAD

net_accept() returns now -2 for fatal failures.
author Timo Sirainen <tss@iki.fi>
date Tue, 26 Nov 2002 15:27:13 +0200
parents 78966c511e57
children d787d0bc3b58
files src/auth/main.c src/lib/network.c src/lib/network.h src/login/main.c
diffstat 4 files changed, 22 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/auth/main.c	Tue Nov 26 15:13:20 2002 +0200
+++ b/src/auth/main.c	Tue Nov 26 15:27:13 2002 +0200
@@ -31,8 +31,12 @@
 	int fd;
 
 	fd = net_accept(listen_fd, NULL, NULL);
-	if (fd != -1)
+	if (fd < 0) {
+		if (fd < -1)
+			i_fatal("accept() failed: %m");
+	} else {
 		(void)login_connection_create(fd);
+	}
 }
 
 static void main_init(void)
--- a/src/lib/network.c	Tue Nov 26 15:13:20 2002 +0200
+++ b/src/lib/network.c	Tue Nov 26 15:27:13 2002 +0200
@@ -335,8 +335,13 @@
 	addrlen = sizeof(so);
 	ret = accept(fd, &so.sa, &addrlen);
 
-	if (ret < 0)
-		return -1;
+	if (ret < 0) {
+		if (errno == EBADF || errno == ENOTSOCK ||
+		    errno == EOPNOTSUPP || errno == EFAULT || errno == EINVAL)
+			return -2;
+		else
+			return -1;
+	}
 
 	if (addr != NULL) sin_get_ip(&so, addr);
 	if (port != NULL) *port = sin_get_port(&so);
--- a/src/lib/network.h	Tue Nov 26 15:13:20 2002 +0200
+++ b/src/lib/network.h	Tue Nov 26 15:27:13 2002 +0200
@@ -62,7 +62,8 @@
 int net_listen(IPADDR *my_ip, unsigned int *port);
 /* Listen for connections on an UNIX socket */
 int net_listen_unix(const char *path);
-/* Accept a connection on a socket */
+/* Accept a connection on a socket. Returns -1 for temporary failure,
+   -2 for fatal failure */
 int net_accept(int fd, IPADDR *addr, unsigned int *port);
 
 /* Read data from socket, return number of bytes read, -1 = error */
--- a/src/login/main.c	Tue Nov 26 15:13:20 2002 +0200
+++ b/src/login/main.c	Tue Nov 26 15:27:13 2002 +0200
@@ -75,8 +75,11 @@
 	int fd;
 
 	fd = net_accept(listen_fd, &addr, NULL);
-	if (fd == -1)
+	if (fd < 0) {
+		if (fd < -1)
+			i_fatal("accept() failed: %m");
 		return;
+	}
 
 	if (process_per_connection)
 		main_close_listen();
@@ -92,8 +95,11 @@
 	int fd, fd_ssl;
 
 	fd = net_accept(listen_fd, &addr, NULL);
-	if (fd == -1)
+	if (fd < 0) {
+		if (fd < -1)
+			i_fatal("accept() failed: %m");
 		return;
+	}
 
 	fd_ssl = ssl_proxy_new(fd);
 	if (fd_ssl == -1)