mirror of https://github.com/xemu-project/xemu.git
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);
|
closesocket(fd);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
qemu_set_nonblock(fd);
|
||||||
|
|
||||||
s = net_socket_fd_init(peer, model, name, fd, 0);
|
s = net_socket_fd_init(peer, model, name, fd, 0);
|
||||||
if (!s) {
|
if (!s) {
|
||||||
|
@ -712,7 +713,11 @@ int net_init_socket(const NetClientOptions *opts, const char *name,
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
fd = monitor_handle_fd_param(cur_mon, sock->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 -1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue