static int vsock_connect_saddr(VsockSocketAddress *vaddr, Error **errp, NonBlockingConnectHandler *callback, void *opaque) { struct sockaddr_vm svm; int sock = -1; bool in_progress; ConnectState *connect_state = NULL; if (!vsock_parse_vaddr_to_sockaddr(vaddr, &svm, errp)) { return -1; } if (callback != NULL) { connect_state = g_malloc0(sizeof(*connect_state)); connect_state->callback = callback; connect_state->opaque = opaque; } sock = vsock_connect_addr(&svm, &in_progress, connect_state, errp); if (sock < 0) { /* do nothing */ } else if (in_progress) { /* wait_for_connect() will do the rest */ return sock; } else { if (callback) { callback(sock, NULL, opaque); } } g_free(connect_state); return sock; }
static int vsock_connect_saddr(VsockSocketAddress *vaddr, Error **errp) { struct sockaddr_vm svm; int sock = -1; if (!vsock_parse_vaddr_to_sockaddr(vaddr, &svm, errp)) { return -1; } sock = vsock_connect_addr(&svm, errp); return sock; }