int unix_connect_opts(QemuOpts *opts) { SockAddress un; const char *path = qemu_opt_get(opts, "path"); int ret, sock; sock = socket_create_unix(SOCKET_STREAM); if (sock < 0) { perror("socket(unix)"); return -1; } sock_address_init_unix(&un, path); ret = socket_connect(sock, &un); sock_address_done(&un); if (ret < 0) { fprintf(stderr, "connect(unix:%s): %s\n", path, errno_str); return -1; } if (sockets_debug) fprintf(stderr, "connect(unix:%s): OK\n", path); return sock; }
void* netPipe_initTcp( void* hwpipe, void* _looper, const char* args ) { /* Build SockAddress from arguments. Acceptable formats are: * <port> */ SockAddress address; uint16_t port; void* ret; if (args == NULL) { D("%s: Missing address!", __FUNCTION__); return NULL; } D("%s: Port is '%s'", __FUNCTION__, args); /* Now, look at the port number */ { char* end; long val = strtol(args, &end, 10); if (end == NULL || *end != '\0' || val <= 0 || val > 65535) { D("%s: Invalid port number: '%s'", __FUNCTION__, args); } port = (uint16_t)val; } sock_address_init_inet(&address, SOCK_ADDRESS_INET_LOOPBACK, port); ret = netPipe_initFromAddress(hwpipe, &address, _looper); sock_address_done(&address); return ret; }
/* Destroys AsyncSocketConnector instance. * Param: * connector - Initialized AsyncSocketConnector instance. */ static void _async_socket_connector_free(AsyncSocketConnector* connector) { if (connector != NULL) { T("ASC %s: Connector is destroying...", _asc_socket_string(connector)); /* Stop all activities. */ if (asyncConnector_stop(connector->connector) == 0) { /* Connection was in progress. We need to destroy I/O descriptor for * that connection. */ D("ASC %s: Stopped async connection in progress.", _asc_socket_string(connector)); loopIo_done(connector->connector_io); } /* Free allocated resources. */ if (connector->looper != NULL) { loopTimer_done(connector->connector_timer); if (connector->owns_looper) { looper_free(connector->looper); } } if (connector->fd >= 0) { socket_close(connector->fd); } T("ASC %s: Connector is destroyed", _asc_socket_string(connector)); sock_address_done(&connector->address); AFREE(connector); } }
void* netPipe_initUnix( void* hwpipe, void* _looper, const char* args ) { /* Build SockAddress from arguments. Acceptable formats are: * * <path> */ SockAddress address; void* ret; if (args == NULL || args[0] == '\0') { D("%s: Missing address!", __FUNCTION__); return NULL; } D("%s: Address is '%s'", __FUNCTION__, args); sock_address_init_unix(&address, args); ret = netPipe_initFromAddress(hwpipe, &address, _looper); sock_address_done(&address); return ret; }