Markus Armbruster <arm...@redhat.com> wrote: > Juan Quintela <quint...@redhat.com> writes: > >> Move all the writes to the migration_thread, and make writings >> blocking. Notice that are still using the iothread for everything >> that we do. > [...] >> diff --git a/qemu-sockets.c b/qemu-sockets.c >> index cfed9c5..61b6e95 100644 >> --- a/qemu-sockets.c >> +++ b/qemu-sockets.c >> @@ -276,9 +276,6 @@ static int inet_connect_addr(struct addrinfo *addr, bool >> *in_progress, >> return -1; >> } >> qemu_setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); >> - if (connect_state != NULL) { >> - socket_set_nonblock(sock); >> - } >> /* connect to peer */ >> do { >> rc = 0; >> @@ -732,7 +729,6 @@ int unix_connect_opts(QemuOpts *opts, Error **errp, >> connect_state = g_malloc0(sizeof(*connect_state)); >> connect_state->callback = callback; >> connect_state->opaque = opaque; >> - socket_set_nonblock(sock); >> } >> >> memset(&un, 0, sizeof(un)); > > Doesn't this break inet_nonblocking_connect() and > unix_nonblocking_connect()? > > In your cover letter, you wrote: > > Note: Writes has become blocking, and I have to change the "remove" > the feature now in qemu-sockets.c. Checked that migration was the > only user of that feature. If new users appear, they just need to add > the socket_set_nonblock() by hand. > > Yes, migration-{tcp,unix} are their only users, but if they want a > blocking socket now, why not use inet_connect() and unix_connect()? > > New users can't "just add socket_set_nonblock()". They'd have to add it > right where you deleted it: between qemu_socket() and connect(). Else > the connect() is blocking.
Grrr. So, is there any way to make a connection that is non-blocking, but then writes are blocking? Later, Juan.