Re: 9.5: Can't connect with PGSSLMODE=require on Windows

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Asif Naeem <anaeem(dot)it(at)gmail(dot)com>
Cc: Heikki Linnakangas <hlinnaka(at)iki(dot)fi>, Thom Brown <thom(at)linux(dot)com>, Michael Paquier <michael(dot)paquier(at)gmail(dot)com>, Robert Haas <robertmhaas(at)gmail(dot)com>, Andrew Dunstan <andrew(at)dunslane(dot)net>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: 9.5: Can't connect with PGSSLMODE=require on Windows
Date: 2015-09-28 20:57:24
Message-ID: 28954.1443473844@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Asif Naeem <anaeem(dot)it(at)gmail(dot)com> writes:
> I have spent sometime to investigate the issue, it is reproduciable. In
> case of Windows, when pqsecure_raw_read() function error code
> WSAEWOULDBLOCK (EWOULDBLOCK) when no data queued to be read from the non
> blocking socket there is a need to log retry flag. Related error code can
> be retrieved via Windows WSAGetLastError() instead of errno, preprocessor
> SOCK_ERRNO handle it gracefully. PFA patch, it resolve the issue i.e.

> @@ -1601,7 +1601,7 @@ my_sock_read(BIO *h, char *buf, int size)
> int save_errno;
>
> res = pqsecure_raw_read((PGconn *) h->ptr, buf, size);
> - save_errno = errno;
> + save_errno = SOCK_ERRNO;
> BIO_clear_retry_flags(h);
> if (res < 0)
> {

Great detective work! But if that's broken, then surely the identical
code in my_sock_write is as well; and the reassignment to errno at the
bottom of my_sock_read needs to be SOCK_ERRNO_SET(); and why doesn't
my_sock_write have a reassignment at all?

regards, tom lane

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Stephen Frost 2015-09-28 21:13:56 Re: row_security GUC, BYPASSRLS
Previous Message Robert Haas 2015-09-28 20:45:51 Re: Foreign join pushdown vs EvalPlanQual