On 15 December 2016 at 18:50, Alin Serdean <[email protected]>
wrote:

> Unfortunately, WSAPoll misbehaves on Windows please view detailed behavior
> on: https://github.com/openvswitch/ovs-issues/issues/117
>
> We replace the WSAPoll with select looking only for errors and write
> events.
>
> Signed-off-by: Alin Gabriel Serdean <[email protected]>
> Reported-at: https://github.com/openvswitch/ovs-issues/issues/117
> Reported-by: Yin Lin <[email protected]>
>

Does the select system call in Windows work with named pipes? On that line,
did it work with WSAPoll?


> ---
>  lib/socket-util.c | 18 +++++++++++++++++-
>  1 file changed, 17 insertions(+), 1 deletion(-)
>
> diff --git a/lib/socket-util.c b/lib/socket-util.c
> index 5a36f3b..2c0f1e6 100644
> --- a/lib/socket-util.c
> +++ b/lib/socket-util.c
> @@ -253,7 +253,23 @@ check_connection_completion(int fd)
>          retval = poll(&pfd, 1, 0);
>      } while (retval < 0 && errno == EINTR);
>  #else
> -    retval = WSAPoll(&pfd, 1, 0);
> +    fd_set wrset, exset;
> +    FD_ZERO(&wrset);
> +    FD_ZERO(&exset);
> +    FD_SET(fd, &exset);
> +    FD_SET(fd, &wrset);
> +    pfd.revents = 0;
> +    struct timeval tv = { 0, 0 };
> +    /* WSAPoll is broken on Windows, instead do a select */
> +    retval = select(0, NULL, &wrset, &exset, &tv);
> +    if (retval == 1) {
> +        if (FD_ISSET(fd, &wrset)) {
> +            pfd.revents |= pfd.events;
> +        }
> +        if (FD_ISSET(fd, &exset)) {
> +            pfd.revents |= POLLERR;
> +        }
> +    }
>  #endif
>      if (retval == 1) {
>          if (pfd.revents & POLLERR) {
> --
> 2.10.2.windows.1
> _______________________________________________
> dev mailing list
> [email protected]
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to