In general for either producer or consumer, the only way to detect peer-crash is by probing (eg: keepalive, 1-byte probe, RTO…).
- Receiver generally don’t probe and will remain oblivious.
- Sender will always notice a missing Ack. After retrying, TCP module will give up and generate SIGPIPE.
|
send/recv buffers full |
buffer full then receiver-crash |
receiver-crash then sender has data to send |
receiver-crash amid active transmission |
|
|
visible symptom |
1-byte probe from sender triggers Ack containing AWS=0 |
The same Ack suddenly stops coming |
very first expected Ack doesn’t come |
Ack was coming in then suddenly stops coming |
|
|
|
|
|
|
|
|
|
retrans by sender |
yes |
yes |
yes |
yes |
|
|
SIGPIPE |
no |
probably |
yes |
probably |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Q20: if a TCP producer process dies After transmission, what would the consumer get?
AA: nothing. See http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/overview.html — Receiver is ready to receive data, and has no idea that sender has crashed.
AA: Same answer on https://blog.stephencleary.com/2009/05/detection-of-half-open-dropped.html
Q21: if a TCP producer process dies During transmission, what would the consumer get?
%A: ditto. Receive has to assume sender stopped.
Q30: if a TCP consumer process dies during a quiet period After transmission, what would the producer get?
AA: P49 [[tcp/ip sockets in C]] Sender doesn’t know right away. At the next send(), sender will get -1 as return value. In addition, SIGPIPE will also be delivered, unless configured otherwise.
Q30b: Is SIGPIPE generated immediately or after some retries?
AA: https://superuser.com/questions/911808/what-happens-to-tcp-connections-when-i-remove-the-ethernet-cable/911829 describes Ack and re-transmission. Sender will notice a missing Ack and RTO will kick in.
%A: I feel TCP module will Not give up prematurely. Sometimes a wire is quickly restored during ftp, without error. If wire remains unplugged it would look exactly like a peer crash.
Q31: if a TCP consumer dies During transmission, what would the producer get?
%A: see Q30.
Q32: if a TCP consumer process dies some time after buffer full, what would the producer get?
%A: probably similar to above, since sender would send a 1-byte probe to trigger a Ack. Not getting the Ack tells sender something. This probe is builtin and mandatory , but functionally similar to (the optional) TCP Keepalive feature
I never studied these topics but they are quite common.