2010/9/27 Guillaume Du Pasquier <guillaume.dupasquier@sensometrix.ch>:
> In both cases, the client socket (pgadmin or my program) remains in
> TIME_WAIT state.
>
> I have used wireshark to sniff the TCP protocol.
>
> We have at the end of a connection:
>
> Client Server
>
> ---> FIN,ACK --->
> <--- FIN,ACK <---
> ---> ACK --->
>
> This ends up in a TIME_WAIT state. The TCP protocol should be
According to the Two Generals' Problem [1], one of the sides
necessarily doesn't know whether the other side has received its last
packet. Therefore, TCP lets one of the sides sit in TIME_WAIT status
for as long as any packets could in principle survive on the network
(typically defined as 2 minutes on IP networks IIRC), and potentially
disturb a new connection between the same (dst IP, dst port, src IP,
src port) combination.
[1] <URL:http://en.wikipedia.org/wiki/Two_Generals'_Problem>
> Client Server
>
> ---> FIN,ACK --->
> <--- ACK <---
> <--- FIN,ACK <---
AFAIK, this last ACK (in above packet) is not needed: the server can
ACK the client's FIN _while_ it sends its own FIN (by using an
appropriate sequence number, as FIN "uses" one byte in the sequence).
> ---> ACK --->
>
> I suppose there is a bug in the postgresql server that do not send an ack to
> the client.
I don't think so.
Nicolas