From 21a60ea97b492ae642d5b35430b24d137cd67f35 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Fri, 11 Dec 2009 16:59:44 -0800 Subject: [PATCH] socket-util: Clarify EAGAIN error code for make_unix_socket(). make_unix_socket() can return EAGAIN in rare circumstances, e.g. when the server's socket listen queue is full. A lot of OVS callers interpret EAGAIN as a "try again" error code, but in this case it means that the attempt to create the socket failed. So munge EAGAIN into another error code to prevent that misinterpretation. --- lib/socket-util.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/socket-util.c b/lib/socket-util.c index e6a6c70ef..ed1901302 100644 --- a/lib/socket-util.c +++ b/lib/socket-util.c @@ -249,6 +249,7 @@ make_unix_socket(int style, bool nonblock, bool passcred UNUSED, make_sockaddr_un(connect_path, &un, &un_len); if (connect(fd, (struct sockaddr*) &un, un_len) && errno != EINPROGRESS) { + printf("connect failed with %s\n", strerror(errno)); goto error; } } @@ -265,10 +266,10 @@ make_unix_socket(int style, bool nonblock, bool passcred UNUSED, return fd; error: + error = errno == EAGAIN ? EPROTO : errno; if (bind_path) { fatal_signal_remove_file_to_unlink(bind_path); } - error = errno; close(fd); return -error; } -- 2.45.2