The problem with sockets is that they buffer data and send it when buffer fills or in given interval. Any way to avoid it and send something through socket with high priority, without any delay? In my case milliseconds count.
Is socket send blocking Python? In Python, a socket can be placed in the blocking or non-blocking mode. In the non-blocking mode, if any call to API, for example, send() or recv() , encounters any problem, an error will be raised. However, in the blocking mode, this will not stop the operation.
You can send and receive on the same socket at the same time (via multiple threads). But the send and receive may not actually occur simultaneously, since one operation may block the other from starting until it's done. That is how it's in Winsock.
SOL_SOCKET is the socket layer itself. It is used for options that are protocol independent.
TCP_NODELAY is the option you are looking for
Sample code:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
For further info see
this SO QA
this article
this other SO QA
Note: on Linux systems option TCP_CORK is also available.
Experiment with both options in your application and see what happens. Please read this exhaustive and very informative article about pros and cons of both.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With