When will my application receive SIGPIPE?
Answer / chaitanya
Very simple: with TCP you get SIGPIPE if your end of the connection has received an RST from the other end. What this also means is that if you were using select instead of write, the select would have indicated the socket as being readable, since the RST is there for you to read (read will return an error with errno set to ECONNRESET).
Basically an RST is TCP's response to some packet that it doesn't expect and has no other way of dealing with. A common case is when the peer closes the connection (sending you a FIN) but you ignore it because you're writing and not reading. (You should be using select.) So you write to a connection that has been closed by the other end and the oether end's TCP responds with an RST.
Is This Answer Correct ? | 0 Yes | 0 No |
What is with the second parameter in bind()?
How many sockets can a cpu have?
How do I get the port number for a given service?
What is a socket connection?
After the chroot(), calls to socket() are failing. Why?
How come only the first part of my datagram is getting through?
How do I use TCP_NODELAY?
How should I choose a port number for my server?
What is active unix domain sockets?
Why does it take so long to detect that the peer died?
How come I get address already in use from bind()?
What's the difference between a socket and a port?