I have an application which communicates with another application using sockets with the send() and recv() functions. The connection is blocking - the application doesn't set the O_NONBLOCK flag. Moreover, send() doesn't use the MSG_DONTWAIT flag.
The communication works fine, but after some time send blocks. It means that there is no more space in the kernel buffer. Could you explain why/when this happens? Does calling the recv() function free the space in the kernel? Maybe one application reads the data slower than the other application is sending it?