[PATCH] ws2_32: Implement setting the keep-alive idle timeout and interval on Mac OS.

Ken Thomases ken at codeweavers.com
Thu Jul 30 10:37:43 CDT 2015


On Jul 30, 2015, at 1:38 AM, Charles Davis <cdavis5x at gmail.com> wrote:

> @@ -4459,14 +4464,20 @@ INT WINAPI WSAIoctl(SOCKET s, DWORD code, LPVOID in_buff, DWORD in_size, LPVOID
>         fd = get_sock_fd(s, 0, NULL);
>         if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepalive, sizeof(int)) == -1)
>             status = WSAEINVAL;
> -#if defined(TCP_KEEPIDLE) && defined(TCP_KEEPINTVL)
> +#if defined(TCP_KEEPIDLE)

This could be an #ifdef, but see below.

>         /* these values need to be set only if SO_KEEPALIVE is enabled */
>         else if(keepalive)
>         {
>             if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, (void *)&keepidle, sizeof(int)) == -1)
>                 status = WSAEINVAL;
> +            /* TCP_KEEPINTVL was only introduced on Mac in 10.9 */
> +#ifdef TCP_KEEPINTVL
>             else if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPINTVL, (void *)&keepintvl, sizeof(int)) == -1)
>                 status = WSAEINVAL;
> +#else
> +            else
> +                FIXME("ignoring keepalive interval\n");
> +#endif
>         }
> #else
>         else

The #ifdef's in the above don't seem quite right.  If TCP_KEEPINTVL is a legitimate alternative to TCP_KEEPIDLE/TCP_KEEPALIVE, then why is the latter a precondition for trying the former?  That is, if TCP_KEEPINTVL is defined but TCP_KEEPIDLE is not, we still don't try it.  That's not something that you introduced, but might as well fix it.

-Ken




More information about the wine-devel mailing list