net: ensure "socket" backend uses non-blocking fds
There are several code paths in net_init_socket() depending on how the socket is created: file descriptor passing, UDP multicast, TCP, or UDP. Some of these support both listen and connect. Not all code paths set the socket to non-blocking. This patch addresses the file descriptor passing and UDP cases which were missing socket_set_nonblock(fd) calls. I considered moving socket_set_nonblock(fd) to a central location but it turns out the code paths are different enough to require non-blocking at different places. Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
This commit is contained in:
parent
f9e8cacc55
commit
fc13fa00ea
@ -674,6 +674,7 @@ static int net_socket_udp_init(NetClientState *peer,
|
||||
closesocket(fd);
|
||||
return -1;
|
||||
}
|
||||
qemu_set_nonblock(fd);
|
||||
|
||||
s = net_socket_fd_init(peer, model, name, fd, 0);
|
||||
if (!s) {
|
||||
@ -712,7 +713,11 @@ int net_init_socket(const NetClientOptions *opts, const char *name,
|
||||
int fd;
|
||||
|
||||
fd = monitor_handle_fd_param(cur_mon, sock->fd);
|
||||
if (fd == -1 || !net_socket_fd_init(peer, "socket", name, fd, 1)) {
|
||||
if (fd == -1) {
|
||||
return -1;
|
||||
}
|
||||
qemu_set_nonblock(fd);
|
||||
if (!net_socket_fd_init(peer, "socket", name, fd, 1)) {
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user