Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/810047/?format=api
{ "id": 810047, "url": "http://patchwork.ozlabs.org/api/patches/810047/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20170905092230.8243-7-berrange@redhat.com/", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api", "name": "QEMU Development", "link_name": "qemu-devel", "list_id": "qemu-devel.nongnu.org", "list_email": "qemu-devel@nongnu.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20170905092230.8243-7-berrange@redhat.com>", "list_archive_url": null, "date": "2017-09-05T09:22:27", "name": "[PULL,v1,6/9] util: remove the obsolete non-blocking connect", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "aa0a121d23fd37f40e816a5ffba5449617d21517", "submitter": { "id": 2694, "url": "http://patchwork.ozlabs.org/api/people/2694/?format=api", "name": "Daniel P. Berrangé", "email": "berrange@redhat.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20170905092230.8243-7-berrange@redhat.com/mbox/", "series": [ { "id": 1527, "url": "http://patchwork.ozlabs.org/api/series/1527/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=1527", "date": "2017-09-05T09:22:21", "name": "[PULL,v1,1/9] io: fix temp directory used by test-io-channel-tls test", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/1527/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/810047/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/810047/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org", "Authentication-Results": [ "ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)", "ext-mx07.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com", "ext-mx07.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=berrange@redhat.com" ], "Received": [ "from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xmhGV0b1Dz9s75\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 5 Sep 2017 19:28:16 +1000 (AEST)", "from localhost ([::1]:57684 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dpA9W-0005VC-7a\n\tfor incoming@patchwork.ozlabs.org; Tue, 05 Sep 2017 05:28:14 -0400", "from eggs.gnu.org ([2001:4830:134:3::10]:41236)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <berrange@redhat.com>) id 1dpA4H-0001EE-NN\n\tfor qemu-devel@nongnu.org; Tue, 05 Sep 2017 05:22:55 -0400", "from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <berrange@redhat.com>) id 1dpA4B-0002lO-Kj\n\tfor qemu-devel@nongnu.org; Tue, 05 Sep 2017 05:22:49 -0400", "from mx1.redhat.com ([209.132.183.28]:2282)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <berrange@redhat.com>) id 1dpA4B-0002kR-Bi\n\tfor qemu-devel@nongnu.org; Tue, 05 Sep 2017 05:22:43 -0400", "from smtp.corp.redhat.com\n\t(int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id 64F7CC04B924;\n\tTue, 5 Sep 2017 09:22:42 +0000 (UTC)", "from t460.redhat.com (unknown [10.33.36.63])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id 0254C60BEC;\n\tTue, 5 Sep 2017 09:22:40 +0000 (UTC)" ], "DMARC-Filter": "OpenDMARC Filter v1.3.2 mx1.redhat.com 64F7CC04B924", "From": "\"Daniel P. Berrange\" <berrange@redhat.com>", "To": "qemu-devel@nongnu.org", "Date": "Tue, 5 Sep 2017 10:22:27 +0100", "Message-Id": "<20170905092230.8243-7-berrange@redhat.com>", "In-Reply-To": "<20170905092230.8243-1-berrange@redhat.com>", "References": "<20170905092230.8243-1-berrange@redhat.com>", "X-Scanned-By": "MIMEDefang 2.79 on 10.5.11.13", "X-Greylist": "Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.31]);\n\tTue, 05 Sep 2017 09:22:42 +0000 (UTC)", "X-detected-operating-system": "by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]\n\t[fuzzy]", "X-Received-From": "209.132.183.28", "Subject": "[Qemu-devel] [PULL v1 6/9] util: remove the obsolete non-blocking\n\tconnect", "X-BeenThere": "qemu-devel@nongnu.org", "X-Mailman-Version": "2.1.21", "Precedence": "list", "List-Id": "<qemu-devel.nongnu.org>", "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>", "List-Archive": "<http://lists.nongnu.org/archive/html/qemu-devel/>", "List-Post": "<mailto:qemu-devel@nongnu.org>", "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>", "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>", "Cc": "Peter Maydell <peter.maydell@linaro.org>,\n\tCao jin <caoj.fnst@cn.fujitsu.com>,\n\tMao Zhongyi <maozy.fnst@cn.fujitsu.com>", "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org", "Sender": "\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>" }, "content": "From: Cao jin <caoj.fnst@cn.fujitsu.com>\n\nThe non-blocking connect mechanism is obsolete, and it doesn't\nwork well in inet connection, because it will call getaddrinfo\nfirst and getaddrinfo will blocks on DNS lookups. Since commit\ne65c67e4 & d984464e, the non-blocking connect of migration goes\nthrough QIOChannel in a different manner(using a thread), and\nnobody use this old non-blocking connect anymore.\n\nAny newly written code which needs a non-blocking connect should\nuse the QIOChannel code, so we can drop NonBlockingConnectHandler\nas a concept entirely.\n\nSuggested-by: Daniel P. Berrange <berrange@redhat.com>\nSigned-off-by: Cao jin <caoj.fnst@cn.fujitsu.com>\nSigned-off-by: Mao Zhongyi <maozy.fnst@cn.fujitsu.com>\nReviewed-by: Juan Quintela <quintela@redhat.com>\nSigned-off-by: Daniel P. Berrange <berrange@redhat.com>\n---\n block/sheepdog.c | 2 +-\n block/ssh.c | 2 +-\n include/qemu/sockets.h | 12 +--\n io/channel-socket.c | 2 +-\n util/qemu-sockets.c | 205 ++++++-------------------------------------------\n 5 files changed, 28 insertions(+), 195 deletions(-)", "diff": "diff --git a/block/sheepdog.c b/block/sheepdog.c\nindex abb2e79065..64ab07f3b7 100644\n--- a/block/sheepdog.c\n+++ b/block/sheepdog.c\n@@ -591,7 +591,7 @@ static int connect_to_sdog(BDRVSheepdogState *s, Error **errp)\n {\n int fd;\n \n- fd = socket_connect(s->addr, NULL, NULL, errp);\n+ fd = socket_connect(s->addr, errp);\n \n if (s->addr->type == SOCKET_ADDRESS_TYPE_INET && fd >= 0) {\n int ret = socket_set_nodelay(fd);\ndiff --git a/block/ssh.c b/block/ssh.c\nindex e8f0404c03..b049a16eb9 100644\n--- a/block/ssh.c\n+++ b/block/ssh.c\n@@ -678,7 +678,7 @@ static int connect_to_ssh(BDRVSSHState *s, QDict *options,\n }\n \n /* Open the socket and connect. */\n- s->sock = inet_connect_saddr(s->inet, NULL, NULL, errp);\n+ s->sock = inet_connect_saddr(s->inet, errp);\n if (s->sock < 0) {\n ret = -EIO;\n goto err;\ndiff --git a/include/qemu/sockets.h b/include/qemu/sockets.h\nindex ef6b5591f7..639cc079d9 100644\n--- a/include/qemu/sockets.h\n+++ b/include/qemu/sockets.h\n@@ -27,18 +27,11 @@ int socket_set_fast_reuse(int fd);\n #define SHUT_RDWR 2\n #endif\n \n-/* callback function for nonblocking connect\n- * valid fd on success, negative error code on failure\n- */\n-typedef void NonBlockingConnectHandler(int fd, Error *err, void *opaque);\n-\n int inet_ai_family_from_address(InetSocketAddress *addr,\n Error **errp);\n int inet_parse(InetSocketAddress *addr, const char *str, Error **errp);\n int inet_connect(const char *str, Error **errp);\n-int inet_connect_saddr(InetSocketAddress *saddr,\n- NonBlockingConnectHandler *callback, void *opaque,\n- Error **errp);\n+int inet_connect_saddr(InetSocketAddress *saddr, Error **errp);\n \n NetworkAddressFamily inet_netfamily(int family);\n \n@@ -46,8 +39,7 @@ int unix_listen(const char *path, char *ostr, int olen, Error **errp);\n int unix_connect(const char *path, Error **errp);\n \n SocketAddress *socket_parse(const char *str, Error **errp);\n-int socket_connect(SocketAddress *addr, NonBlockingConnectHandler *callback,\n- void *opaque, Error **errp);\n+int socket_connect(SocketAddress *addr, Error **errp);\n int socket_listen(SocketAddress *addr, Error **errp);\n void socket_listen_cleanup(int fd, Error **errp);\n int socket_dgram(SocketAddress *remote, SocketAddress *local, Error **errp);\ndiff --git a/io/channel-socket.c b/io/channel-socket.c\nindex 591d27e8c3..563e297357 100644\n--- a/io/channel-socket.c\n+++ b/io/channel-socket.c\n@@ -140,7 +140,7 @@ int qio_channel_socket_connect_sync(QIOChannelSocket *ioc,\n int fd;\n \n trace_qio_channel_socket_connect_sync(ioc, addr);\n- fd = socket_connect(addr, NULL, NULL, errp);\n+ fd = socket_connect(addr, errp);\n if (fd < 0) {\n trace_qio_channel_socket_connect_fail(ioc);\n return -1;\ndiff --git a/util/qemu-sockets.c b/util/qemu-sockets.c\nindex 6a511fbf76..b47fb45885 100644\n--- a/util/qemu-sockets.c\n+++ b/util/qemu-sockets.c\n@@ -342,88 +342,19 @@ listen_ok:\n ((rc) == -EINPROGRESS)\n #endif\n \n-/* Struct to store connect state for non blocking connect */\n-typedef struct ConnectState {\n- int fd;\n- struct addrinfo *addr_list;\n- struct addrinfo *current_addr;\n- NonBlockingConnectHandler *callback;\n- void *opaque;\n-} ConnectState;\n-\n-static int inet_connect_addr(struct addrinfo *addr, bool *in_progress,\n- ConnectState *connect_state, Error **errp);\n+static int inet_connect_addr(struct addrinfo *addr, Error **errp);\n \n-static void wait_for_connect(void *opaque)\n-{\n- ConnectState *s = opaque;\n- int val = 0, rc = 0;\n- socklen_t valsize = sizeof(val);\n- bool in_progress;\n- Error *err = NULL;\n-\n- qemu_set_fd_handler(s->fd, NULL, NULL, NULL);\n-\n- do {\n- rc = qemu_getsockopt(s->fd, SOL_SOCKET, SO_ERROR, &val, &valsize);\n- } while (rc == -1 && errno == EINTR);\n-\n- /* update rc to contain error */\n- if (!rc && val) {\n- rc = -1;\n- errno = val;\n- }\n-\n- /* connect error */\n- if (rc < 0) {\n- error_setg_errno(&err, errno, \"Error connecting to socket\");\n- closesocket(s->fd);\n- s->fd = rc;\n- }\n-\n- /* try to connect to the next address on the list */\n- if (s->current_addr) {\n- while (s->current_addr->ai_next != NULL && s->fd < 0) {\n- s->current_addr = s->current_addr->ai_next;\n- s->fd = inet_connect_addr(s->current_addr, &in_progress, s, NULL);\n- if (s->fd < 0) {\n- error_free(err);\n- err = NULL;\n- error_setg_errno(&err, errno, \"Unable to start socket connect\");\n- }\n- /* connect in progress */\n- if (in_progress) {\n- goto out;\n- }\n- }\n-\n- freeaddrinfo(s->addr_list);\n- }\n-\n- if (s->callback) {\n- s->callback(s->fd, err, s->opaque);\n- }\n- g_free(s);\n-out:\n- error_free(err);\n-}\n-\n-static int inet_connect_addr(struct addrinfo *addr, bool *in_progress,\n- ConnectState *connect_state, Error **errp)\n+static int inet_connect_addr(struct addrinfo *addr, Error **errp)\n {\n int sock, rc;\n \n- *in_progress = false;\n-\n sock = qemu_socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol);\n if (sock < 0) {\n error_setg_errno(errp, errno, \"Failed to create socket\");\n return -1;\n }\n socket_set_fast_reuse(sock);\n- if (connect_state != NULL) {\n- qemu_set_nonblock(sock);\n- }\n+\n /* connect to peer */\n do {\n rc = 0;\n@@ -432,15 +363,12 @@ static int inet_connect_addr(struct addrinfo *addr, bool *in_progress,\n }\n } while (rc == -EINTR);\n \n- if (connect_state != NULL && QEMU_SOCKET_RC_INPROGRESS(rc)) {\n- connect_state->fd = sock;\n- qemu_set_fd_handler(sock, NULL, wait_for_connect, connect_state);\n- *in_progress = true;\n- } else if (rc < 0) {\n+ if (rc < 0) {\n error_setg_errno(errp, errno, \"Failed to connect socket\");\n closesocket(sock);\n return -1;\n }\n+\n return sock;\n }\n \n@@ -498,44 +426,24 @@ static struct addrinfo *inet_parse_connect_saddr(InetSocketAddress *saddr,\n *\n * @saddr: Inet socket address specification\n * @errp: set on error\n- * @callback: callback function for non-blocking connect\n- * @opaque: opaque for callback function\n *\n * Returns: -1 on error, file descriptor on success.\n- *\n- * If @callback is non-null, the connect is non-blocking. If this\n- * function succeeds, callback will be called when the connection\n- * completes, with the file descriptor on success, or -1 on error.\n */\n-int inet_connect_saddr(InetSocketAddress *saddr,\n- NonBlockingConnectHandler *callback, void *opaque,\n- Error **errp)\n+int inet_connect_saddr(InetSocketAddress *saddr, Error **errp)\n {\n Error *local_err = NULL;\n struct addrinfo *res, *e;\n int sock = -1;\n- bool in_progress;\n- ConnectState *connect_state = NULL;\n \n res = inet_parse_connect_saddr(saddr, errp);\n if (!res) {\n return -1;\n }\n \n- if (callback != NULL) {\n- connect_state = g_malloc0(sizeof(*connect_state));\n- connect_state->addr_list = res;\n- connect_state->callback = callback;\n- connect_state->opaque = opaque;\n- }\n-\n for (e = res; e != NULL; e = e->ai_next) {\n error_free(local_err);\n local_err = NULL;\n- if (connect_state != NULL) {\n- connect_state->current_addr = e;\n- }\n- sock = inet_connect_addr(e, &in_progress, connect_state, &local_err);\n+ sock = inet_connect_addr(e, &local_err);\n if (sock >= 0) {\n break;\n }\n@@ -543,15 +451,8 @@ int inet_connect_saddr(InetSocketAddress *saddr,\n \n if (sock < 0) {\n error_propagate(errp, local_err);\n- } else if (in_progress) {\n- /* wait_for_connect() will do the rest */\n- return sock;\n- } else {\n- if (callback) {\n- callback(sock, NULL, opaque);\n- }\n }\n- g_free(connect_state);\n+\n freeaddrinfo(res);\n return sock;\n }\n@@ -730,7 +631,7 @@ int inet_connect(const char *str, Error **errp)\n InetSocketAddress *addr = g_new(InetSocketAddress, 1);\n \n if (!inet_parse(addr, str, errp)) {\n- sock = inet_connect_saddr(addr, NULL, NULL, errp);\n+ sock = inet_connect_saddr(addr, errp);\n }\n qapi_free_InetSocketAddress(addr);\n return sock;\n@@ -763,21 +664,16 @@ static bool vsock_parse_vaddr_to_sockaddr(const VsockSocketAddress *vaddr,\n return true;\n }\n \n-static int vsock_connect_addr(const struct sockaddr_vm *svm, bool *in_progress,\n- ConnectState *connect_state, Error **errp)\n+static int vsock_connect_addr(const struct sockaddr_vm *svm, Error **errp)\n {\n int sock, rc;\n \n- *in_progress = false;\n-\n sock = qemu_socket(AF_VSOCK, SOCK_STREAM, 0);\n if (sock < 0) {\n error_setg_errno(errp, errno, \"Failed to create socket\");\n return -1;\n }\n- if (connect_state != NULL) {\n- qemu_set_nonblock(sock);\n- }\n+\n /* connect to peer */\n do {\n rc = 0;\n@@ -786,50 +682,26 @@ static int vsock_connect_addr(const struct sockaddr_vm *svm, bool *in_progress,\n }\n } while (rc == -EINTR);\n \n- if (connect_state != NULL && QEMU_SOCKET_RC_INPROGRESS(rc)) {\n- connect_state->fd = sock;\n- qemu_set_fd_handler(sock, NULL, wait_for_connect, connect_state);\n- *in_progress = true;\n- } else if (rc < 0) {\n+ if (rc < 0) {\n error_setg_errno(errp, errno, \"Failed to connect socket\");\n closesocket(sock);\n return -1;\n }\n+\n return sock;\n }\n \n-static int vsock_connect_saddr(VsockSocketAddress *vaddr,\n- NonBlockingConnectHandler *callback,\n- void *opaque,\n- Error **errp)\n+static int vsock_connect_saddr(VsockSocketAddress *vaddr, Error **errp)\n {\n struct sockaddr_vm svm;\n int sock = -1;\n- bool in_progress;\n- ConnectState *connect_state = NULL;\n \n if (!vsock_parse_vaddr_to_sockaddr(vaddr, &svm, errp)) {\n return -1;\n }\n \n- if (callback != NULL) {\n- connect_state = g_malloc0(sizeof(*connect_state));\n- connect_state->callback = callback;\n- connect_state->opaque = opaque;\n- }\n+ sock = vsock_connect_addr(&svm, errp);\n \n- sock = vsock_connect_addr(&svm, &in_progress, connect_state, errp);\n- if (sock < 0) {\n- /* do nothing */\n- } else if (in_progress) {\n- /* wait_for_connect() will do the rest */\n- return sock;\n- } else {\n- if (callback) {\n- callback(sock, NULL, opaque);\n- }\n- }\n- g_free(connect_state);\n return sock;\n }\n \n@@ -889,9 +761,7 @@ static void vsock_unsupported(Error **errp)\n error_setg(errp, \"socket family AF_VSOCK unsupported\");\n }\n \n-static int vsock_connect_saddr(VsockSocketAddress *vaddr,\n- NonBlockingConnectHandler *callback,\n- void *opaque, Error **errp)\n+static int vsock_connect_saddr(VsockSocketAddress *vaddr, Error **errp)\n {\n vsock_unsupported(errp);\n return -1;\n@@ -994,12 +864,9 @@ err:\n return -1;\n }\n \n-static int unix_connect_saddr(UnixSocketAddress *saddr,\n- NonBlockingConnectHandler *callback, void *opaque,\n- Error **errp)\n+static int unix_connect_saddr(UnixSocketAddress *saddr, Error **errp)\n {\n struct sockaddr_un un;\n- ConnectState *connect_state = NULL;\n int sock, rc;\n \n if (saddr->path == NULL) {\n@@ -1012,12 +879,6 @@ static int unix_connect_saddr(UnixSocketAddress *saddr,\n error_setg_errno(errp, errno, \"Failed to create socket\");\n return -1;\n }\n- if (callback != NULL) {\n- connect_state = g_malloc0(sizeof(*connect_state));\n- connect_state->callback = callback;\n- connect_state->opaque = opaque;\n- qemu_set_nonblock(sock);\n- }\n \n if (strlen(saddr->path) > sizeof(un.sun_path)) {\n error_setg(errp, \"UNIX socket path '%s' is too long\", saddr->path);\n@@ -1038,29 +899,16 @@ static int unix_connect_saddr(UnixSocketAddress *saddr,\n }\n } while (rc == -EINTR);\n \n- if (connect_state != NULL && QEMU_SOCKET_RC_INPROGRESS(rc)) {\n- connect_state->fd = sock;\n- qemu_set_fd_handler(sock, NULL, wait_for_connect, connect_state);\n- return sock;\n- } else if (rc >= 0) {\n- /* non blocking socket immediate success, call callback */\n- if (callback != NULL) {\n- callback(sock, NULL, opaque);\n- }\n- }\n-\n if (rc < 0) {\n error_setg_errno(errp, -rc, \"Failed to connect socket %s\",\n saddr->path);\n goto err;\n }\n \n- g_free(connect_state);\n return sock;\n \n err:\n close(sock);\n- g_free(connect_state);\n return -1;\n }\n \n@@ -1075,9 +923,7 @@ static int unix_listen_saddr(UnixSocketAddress *saddr,\n return -1;\n }\n \n-static int unix_connect_saddr(UnixSocketAddress *saddr,\n- NonBlockingConnectHandler *callback, void *opaque,\n- Error **errp)\n+static int unix_connect_saddr(UnixSocketAddress *saddr, Error **errp)\n {\n error_setg(errp, \"unix sockets are not available on windows\");\n errno = ENOTSUP;\n@@ -1123,7 +969,7 @@ int unix_connect(const char *path, Error **errp)\n \n saddr = g_new0(UnixSocketAddress, 1);\n saddr->path = g_strdup(path);\n- sock = unix_connect_saddr(saddr, NULL, NULL, errp);\n+ sock = unix_connect_saddr(saddr, errp);\n qapi_free_UnixSocketAddress(saddr);\n return sock;\n }\n@@ -1168,30 +1014,25 @@ fail:\n return NULL;\n }\n \n-int socket_connect(SocketAddress *addr, NonBlockingConnectHandler *callback,\n- void *opaque, Error **errp)\n+int socket_connect(SocketAddress *addr, Error **errp)\n {\n int fd;\n \n switch (addr->type) {\n case SOCKET_ADDRESS_TYPE_INET:\n- fd = inet_connect_saddr(&addr->u.inet, callback, opaque, errp);\n+ fd = inet_connect_saddr(&addr->u.inet, errp);\n break;\n \n case SOCKET_ADDRESS_TYPE_UNIX:\n- fd = unix_connect_saddr(&addr->u.q_unix, callback, opaque, errp);\n+ fd = unix_connect_saddr(&addr->u.q_unix, errp);\n break;\n \n case SOCKET_ADDRESS_TYPE_FD:\n fd = monitor_get_fd(cur_mon, addr->u.fd.str, errp);\n- if (fd >= 0 && callback) {\n- qemu_set_nonblock(fd);\n- callback(fd, NULL, opaque);\n- }\n break;\n \n case SOCKET_ADDRESS_TYPE_VSOCK:\n- fd = vsock_connect_saddr(&addr->u.vsock, callback, opaque, errp);\n+ fd = vsock_connect_saddr(&addr->u.vsock, errp);\n break;\n \n default:\n", "prefixes": [ "PULL", "v1", "6/9" ] }