From: Ben Pfaff Date: Sat, 12 Dec 2009 00:59:44 +0000 (-0800) Subject: socket-util: Clarify EAGAIN error code for make_unix_socket(). X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=21a60ea97b492ae642d5b35430b24d137cd67f35;p=openvswitch 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. --- diff --git a/lib/socket-util.c b/lib/socket-util.c index e6a6c70e..ed190130 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; }