int socket_listen(SocketAddress *addr, Error **errp) { int fd; switch (addr->type) { case SOCKET_ADDRESS_KIND_INET: fd = inet_listen_saddr(addr->u.inet.data, 0, false, errp); break; case SOCKET_ADDRESS_KIND_UNIX: fd = unix_listen_saddr(addr->u.q_unix.data, false, errp); break; case SOCKET_ADDRESS_KIND_FD: fd = monitor_get_fd(cur_mon, addr->u.fd.data->str, errp); break; case SOCKET_ADDRESS_KIND_VSOCK: fd = vsock_listen_saddr(addr->u.vsock.data, errp); break; default: abort(); } return fd; }
int socket_listen(SocketAddress *addr, Error **errp) { int fd; switch (addr->type) { case SOCKET_ADDRESS_TYPE_INET: fd = inet_listen_saddr(&addr->u.inet, 0, errp); break; case SOCKET_ADDRESS_TYPE_UNIX: fd = unix_listen_saddr(&addr->u.q_unix, errp); break; case SOCKET_ADDRESS_TYPE_FD: fd = monitor_get_fd(cur_mon, addr->u.fd.str, errp); break; case SOCKET_ADDRESS_TYPE_VSOCK: fd = vsock_listen_saddr(&addr->u.vsock, errp); break; default: abort(); } return fd; }
int inet_listen(const char *str, char *ostr, int olen, int socktype, int port_offset, Error **errp) { char *optstr; int sock = -1; InetSocketAddress *addr; addr = inet_parse(str, errp); if (addr != NULL) { sock = inet_listen_saddr(addr, port_offset, true, errp); if (sock != -1 && ostr) { optstr = strchr(str, ','); if (addr->ipv6) { snprintf(ostr, olen, "[%s]:%s%s", addr->host, addr->port, optstr ? optstr : ""); } else { snprintf(ostr, olen, "%s:%s%s", addr->host, addr->port, optstr ? optstr : ""); } } qapi_free_InetSocketAddress(addr); } return sock; }