aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Craig Tiller <ctiller@google.com>2016-06-03 11:30:11 -0700
committerGravatar Craig Tiller <ctiller@google.com>2016-06-03 11:30:11 -0700
commita3416fbfd4d463665db4704f7a71ee07b8fa7ae3 (patch)
treebde1ae23f9e27e6d53bb3c7e7ff4dce7510027ee /src
parentf5f290459a04a4d5afb555e7b6d7ccb23646e427 (diff)
parente5ee38d0cfce43e1f61d7ae7313ba314af25825c (diff)
Merge branch 'error' of github.com:ctiller/grpc into error
Diffstat (limited to 'src')
-rw-r--r--src/core/lib/iomgr/socket_utils_common_posix.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/core/lib/iomgr/socket_utils_common_posix.c b/src/core/lib/iomgr/socket_utils_common_posix.c
index d1721c910c..61d94d660c 100644
--- a/src/core/lib/iomgr/socket_utils_common_posix.c
+++ b/src/core/lib/iomgr/socket_utils_common_posix.c
@@ -49,6 +49,7 @@
#include <sys/types.h>
#include <unistd.h>
+#include <grpc/support/alloc.h>
#include <grpc/support/host_port.h>
#include <grpc/support/log.h>
#include <grpc/support/port_platform.h>
@@ -216,6 +217,16 @@ static int set_socket_dualstack(int fd) {
}
}
+static grpc_error *error_for_fd(int fd, const struct sockaddr *addr) {
+ if (fd >= 0) return GRPC_ERROR_NONE;
+ char *addr_str;
+ grpc_sockaddr_to_string(&addr_str, addr, 0);
+ grpc_error *err = grpc_error_set_str(GRPC_OS_ERROR(errno, "socket"),
+ GRPC_ERROR_STR_TARGET_ADDRESS, addr_str);
+ gpr_free(err);
+ return err;
+}
+
grpc_error *grpc_create_dualstack_socket(const struct sockaddr *addr, int type,
int protocol,
grpc_dualstack_mode *dsmode,
@@ -236,7 +247,7 @@ grpc_error *grpc_create_dualstack_socket(const struct sockaddr *addr, int type,
/* If this isn't an IPv4 address, then return whatever we've got. */
if (!grpc_sockaddr_is_v4mapped(addr, NULL)) {
*dsmode = GRPC_DSMODE_IPV6;
- return GRPC_ERROR_NONE;
+ return error_for_fd(*newfd, addr);
}
/* Fall back to AF_INET. */
if (*newfd >= 0) {
@@ -246,10 +257,7 @@ grpc_error *grpc_create_dualstack_socket(const struct sockaddr *addr, int type,
}
*dsmode = family == AF_INET ? GRPC_DSMODE_IPV4 : GRPC_DSMODE_NONE;
*newfd = socket(family, type, protocol);
- if (*newfd == -1) {
- return GRPC_OS_ERROR(errno, "socket");
- }
- return GRPC_ERROR_NONE;
+ return error_for_fd(*newfd, addr);
}
#endif