The new connection made by PQcancel does not use the tcp_user_timeout, 
connect_timeout or any of the keepalive settings that are provided in the 
connection string. This means that a call to PQcancel can block for a much 
longer time than intended if there are network issues. This can be especially 
impactful, because PQcancel is a blocking function an there is no non blocking 
version of it. 

I attached a proposed patch to use the tcp_user_timeout from the connection 
string when connecting to Postgres in PQcancel. This resolves the issue for me, 
since this will make connecting timeout after a configurable time. So the other 
options are not strictly needed. It might still be nice for completeness to 
support them too though. I didn't do this yet, because I first wanted some 
feedback and also because implementing connect_timeout would require using non 
blocking TCP to connect and then use select to have a timeout.

Attachment: 0001-Use-tcp_user_timeout-in-PQcancel.patch
Description: 0001-Use-tcp_user_timeout-in-PQcancel.patch

Reply via email to