[Spice-devel] [PATCH spice-server 21/33] dispatcher: Port to Windows
Marc-André Lureau
marcandre.lureau at gmail.com
Sat Dec 22 10:17:57 UTC 2018
Hi
On Fri, Dec 21, 2018 at 4:04 PM Frediano Ziglio <fziglio at redhat.com> wrote:
>
> Replace poll call with select.
> As socket is set to non-blocking we must support it so if
> we detect an EAGAIN error wait for data.
I am not fond of the two code paths, why not switch the code to select()?
I wonder if existing poll() could be easily replaced with WSAPoll.
>
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> ---
> server/dispatcher.c | 20 ++++++++++++++++++++
> 1 file changed, 20 insertions(+)
>
> diff --git a/server/dispatcher.c b/server/dispatcher.c
> index 4cd91f11..9a55a4c9 100644
> --- a/server/dispatcher.c
> +++ b/server/dispatcher.c
> @@ -197,6 +197,7 @@ static int read_safe(socket_t fd, uint8_t *buf, size_t size, int block)
> }
>
> if (!block) {
> +#ifndef _WIN32
> struct pollfd pollfd = {.fd = socket_get_raw(fd), .events = POLLIN, .revents = 0};
> while ((ret = poll(&pollfd, 1, 0)) == -1) {
> if (errno == EINTR) {
> @@ -209,6 +210,15 @@ static int read_safe(socket_t fd, uint8_t *buf, size_t size, int block)
> if (!(pollfd.revents & POLLIN)) {
> return 0;
> }
> +#else
> + struct timeval tv = { 0, 0 };
> + fd_set fds;
> + FD_ZERO(&fds);
> + FD_SET(socket_get_raw(fd), &fds);
> + if (select(1, &fds, NULL, NULL, &tv) < 1) {
> + return 0;
> + }
> +#endif
> }
> while (read_size < size) {
> ret = socket_read(fd, buf + read_size, size - read_size);
> @@ -217,6 +227,16 @@ static int read_safe(socket_t fd, uint8_t *buf, size_t size, int block)
> spice_debug("EINTR in read");
> continue;
> }
> +#ifdef _WIN32
> + // Windows turns this socket not-blocking
> + if (errno == EAGAIN) {
> + fd_set fds;
> + FD_ZERO(&fds);
> + FD_SET(socket_get_raw(fd), &fds);
> + select(1, &fds, NULL, NULL, NULL);
> + continue;
> + }
> +#endif
> return -1;
> }
> if (ret == 0) {
> --
> 2.17.2
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
--
Marc-André Lureau
More information about the Spice-devel
mailing list