I have a strange problem with TCP sockets. I have a client which connects to the server and sends some 8-byte string message. the send() function returns value 8. Now on the server side when the recv() function unblocks it returns 0, meaning the client has disconnected. But that is not the case since the client loops and no close() or shutdown() was called.
I've also checked the packets with sharkwire and it turns out there was no error at all. There's the 3-way handshake upon connection and then the PSH packet from the client. After that the server responses with ACK and that's that. I made a syscall trace but between connect() and recvfrom() (or sendto() on the client side) there is no single call to close() on the socket.
What could be wrong?