Re: Streaming replication and non-blocking I/O
Fujii Masao <masao.fujii@gmail.com>
From: Fujii Masao <masao.fujii@gmail.com>
To: Heikki Linnakangas <heikki.linnakangas@enterprisedb.com>
Cc: Magnus Hagander <magnus@hagander.net>, Tom Lane <tgl@sss.pgh.pa.us>, PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2010-01-14T12:46:07Z
Lists: pgsql-hackers
On Thu, Jan 14, 2010 at 9:14 PM, Heikki Linnakangas <heikki.linnakangas@enterprisedb.com> wrote: > After reading up on SSL_read() and SSL_pending(), it seems that there is > unfortunately no reliable way of checking if there is incoming data that > can be read using SSL_read() without blocking, short of putting the > socket to non-blocking mode. It also seems that we can't rely on poll() > returning POLLHUP if the remote end has disconnected; it's not doing > that at least on my laptop. > > So, the only solution I can see is to put the socket to non-blocking > mode. But to keep the change localized, let's switch to non-blocking > mode only temporarily, just when polling to see if there's data to read > (or EOF), and switch back immediately afterwards. Agreed. Though I also read some pages referring to that issue, I was not able to find any better action other than the temporal switch of the blocking mode. > I've added a pq_getbyte_if_available() function to pqcomm.c to do that. > The API to the upper levels is quite nice, the function returns a byte > if one is available without blocking. Only minimal changes are required > elsewhere. Great! Thanks a lot! Regards, -- Fujii Masao NIPPON TELEGRAPH AND TELEPHONE CORPORATION NTT Open Source Software Center