unsigned int yes = 1;
if (!inet_parse_passive(target, default_port, &sin)) {
- return EAFNOSUPPORT;
+ return -EAFNOSUPPORT;
}
/* Create non-blocking socket, set SO_REUSEADDR. */
if (fd < 0) {
error = errno;
VLOG_ERR("%s: socket: %s", target, strerror(error));
- return error;
+ return -error;
}
error = set_nonblocking(fd);
if (error) {
}
/* Listen. */
- if (listen(fd, 10) < 0) {
+ if (style == SOCK_STREAM && listen(fd, 10) < 0) {
error = errno;
VLOG_ERR("%s: listen: %s", target, strerror(error));
goto error;
goto error;
}
if (sin.sin_family != AF_INET || sin_len != sizeof sin) {
+ error = EAFNOSUPPORT;
VLOG_ERR("%s: getsockname: invalid socket name", target);
goto error;
}
error:
close(fd);
- return error;
+ return -error;
}
/* Returns a readable and writable fd for /dev/null, if successful, otherwise