Hi Daniel & Paolo, Commit 9894dc0c "char: convert from GIOChannel to QIOChannel", about the below code segment:
static bool qemu_chr_open_socket_fd(CharDriverState *chr, Error **errp) { TCPCharDriver *s = chr->opaque; - int fd; + QIOChannelSocket *sioc = qio_channel_socket_new(); if (s->is_listen) { - fd = socket_listen(s->addr, errp); + if (qio_channel_socket_listen_sync(sioc, s->addr, errp) < 0) { + goto fail; + } + qemu_chr_finish_socket_connection(chr, sioc); } else if (s->reconnect_time) { - fd = socket_connect(s->addr, errp, qemu_chr_socket_connected, chr); - return fd >= 0; + qio_channel_socket_connect_async(sioc, s->addr, + qemu_chr_socket_connected, + chr, NULL); } else { - fd = socket_connect(s->addr, errp, NULL, NULL); - } - if (fd < 0) { - return false; + if (qio_channel_socket_connect_sync(sioc, s->addr, errp) < 0) { + goto fail; + } + qemu_chr_finish_socket_connection(chr, sioc); } - qemu_chr_finish_socket_connection(chr, fd); return true; + + fail: + object_unref(OBJECT(sioc)); + return false; } Why did you change socket_connect() to qio_channel_socket_connect_async but not qio_channel_socket_connect_sync when s->reconnect_time is ture? Thanks. I can't get the reason from the commit message. PS: We encountered a problem that when config vhost-user-net reconneticon function, the virtio_net_get_features() didn't get a correct value after this changed, and it was fixed when we change the async to sync. [2016-07-17 21:18:55] virtio_net_get_features:551 virtio_net_get_features 5 n->host_features=12582855, features=2042626023, nc->peer=0x7f11c4b80820 [2016-07-17 21:18:55] get_vhost_net:400 get_vhost_net nc=0x7f11c4b80820 [2016-07-17 21:18:55] get_vhost_net:405 get_vhost_net nc type=11, NET_CLIENT_OPTIONS_KIND_TAP=3, NET_CLIENT_OPTIONS_KIND_VHOST_USER=11 [2016-07-17 21:18:55] get_vhost_net:417 get_vhost_net vhost_net=(nil) Regards, -Gonglei