I am wondering if it is possible to have a socket with send which doens’t work (because buffer of peer is full maybe) while receive part still working ?
EDIT:
In case of a peer which doesn’t perform a half close connection, and which it is too long to process its receive buffer (so its receive buffer is full), can I have an error only on my send part ?
Short answer: yes. If remote peer receives data at a slow rate (possibly due to slow data processing between recv calls) it will slow down transmission at a sending side: ACKs will be coming slowly and sending buffer will quickly get full which will cause your socket send operation to block or return error. On the other hand, as TCP is bidirectional protocol and TCP stack uses different kernel buffer for receiving data, local peer can still receive data sent from remote peer.