TCP option assign hook doesn't work well if option not supported

From: Peter Eisentraut <peter(dot)eisentraut(at)2ndquadrant(dot)com>
To: pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: TCP option assign hook doesn't work well if option not supported
Date: 2019-12-19 18:26:19
Message-ID: 4681a78a-cc8e-76c0-75ac-7aef6def1908@2ndquadrant.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

macOS does not support the socket option TCP_USER_TIMEOUT. Yet, I can
start a server with postgres -D ... --tcp-user-timeout=100 without a
diagnostic. Only when I connect I get a log entry

LOG: setsockopt(TCP_USER_TIMEOUT) not supported

Perhaps the logic in pq_settcpusertimeout() should be changed like this:

int
pq_settcpusertimeout(int timeout, Port *port)
{
+#ifdef TCP_USER_TIMEOUT
if (port == NULL || IS_AF_UNIX(port->laddr.addr.ss_family))
return STATUS_OK;

-#ifdef TCP_USER_TIMEOUT
if (timeout == port->tcp_user_timeout)
return STATUS_OK;

So that the #else branch that is supposed to check this will also be run
in the postmaster (where port == NULL).

Or perhaps there should be a separate GUC check hook that just does

#ifndef TCP_USER_TIMEOUT
if (val != 0)
return false;
#endif
return true;

The same considerations apply to the various TCP keepalive settings, but
since those are widely supported the unsupported code paths probably
haven't gotten much attention.

--
Peter Eisentraut http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Juan José Santamaría Flecha 2019-12-19 19:09:45 Re: Clean up some old cruft related to Windows
Previous Message Peter Eisentraut 2019-12-19 18:19:56 Re: How is this possible "publication does not exist"