- if (!socket_add(&listener->socket, accept_connection, (void*) listener,
+ return 1;
+}
+
+/** Open listening socket for \a listener.
+ * @param[in,out] listener Listener to make a socket for.
+ * @param[in] family Socket address family to use.
+ * @return Negative on failure, file descriptor on success.
+ */
+static int inetport(struct Listener* listener, int family)
+{
+ struct Socket *sock;
+ int fd;
+
+ /*
+ * At first, open a new socket
+ */
+ fd = os_socket(&listener->addr, SOCK_STREAM, get_listener_name(listener), family);
+ if (fd < 0)
+ return -1;
+ if (!os_set_listen(fd, HYBRID_SOMAXCONN)) {
+ report_error(LISTEN_ERROR_MSG, get_listener_name(listener), errno);
+ close(fd);
+ return -1;
+ }
+ if (!set_listener_options(listener, fd))
+ return -1;
+ sock = (family == AF_INET) ? &listener->socket_v4 : &listener->socket_v6;
+ if (!socket_add(sock, accept_connection, (void*) listener,