Re: Clients disconnect but query still runs
От | Craig Ringer |
---|---|
Тема | Re: Clients disconnect but query still runs |
Дата | |
Msg-id | 1248936189.20095.320.camel@ayaki обсуждение исходный текст |
Ответ на | Re: Clients disconnect but query still runs (Greg Stark <gsstark@mit.edu>) |
Ответы |
Re: Clients disconnect but query still runs
|
Список | pgsql-general |
On Wed, 2009-07-29 at 14:56 +0100, Greg Stark wrote: > SIGURG might be useful but it would be more complex to use and less > widely useful since it would only work if the client disconnects > gracefully (though it might be worth checking into as an alternative > to our existing query cancel method). Might it not also fire if the client disconnects without notice, but tcp keepalives are enabled? I might have to write a little test program and see. [much later] My test program did not appear to receive SIGURB, even after registering for it with fcntl(sockfd, F_SETOWN, ...) and setting a signal handler for it. This was the case whether the connection was dropped due to a tcp keepalive failure, the dropping of a network interface, or a normal disconnect. The next read() or recv() returned zero bytes read but no asynchronous notification appeared to occur. I'm under the impression it's really for use with asynchronous sockets, but haven't tested this yet. What does work well is occasionally poking the socket with recv(..., MSG_DONTWAIT) while doing other work. Program attached. TCP keepalives seem to work very well at least on my Linux test system, and it's easy to test for a dud connection using recv(...) with the MSG_DONTWAIT and (if desired) MSG_PEEK flags. If the connection has exited cleanly it'll return a zero-size read; if the connection has dropped due to keepalive failure it'll return ETIMEDOUT. Pg's backend code already supports keepalives. I guess what'd be helpful would be a periodic recv(..., MSG_DONTWAIT) on the client<->server socket while the backend is working hard on a query. A SIGLARM would be handy for that, though I guess Pg isn't used to having to test for EINTR on syscalls... -- Craig Ringer
Вложения
В списке pgsql-general по дате отправления: