On Monday, July 14, 2014 1:03:25 PM UTC+5:30, Saúl Ibarra Corretgé wrote: > > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > On 07/14/2014 07:08 AM, Ashish wrote: > > > > Lets say many clients are connected to a tcp server and server is > > asynchronously sending them certain number of bytes. Now if one of > > the clients does never read those bytes (never calls WSARecv), > > those bytes get accumulated at server end. After that, surprisingly > > other clients too do not receive their bytes. > > > > This results in never getting uv_write_cb in server code. > > > > If we disconnect the client (who has stopped calling WSARecv) > > things comes on normal track, and we can see other clients > > receiving their bytes. > > > > How can we proactively stop this happening? I mean is there any way > > to detect client stopped reads. (So we can proactively disconnect > > it before too many bytes get accumulated at server end) > > > > Streams keep track of the queued bytes (stream->write_queue_size). You > should use that to check if the client is not reading or it's too slow > at reading and just pause the writing on your end. You can check the > number of queued bytes in the write callbacks to decide when to resume > sending data. > > IMHO a client stream having big queue size might be result of some other client has not picked up data ?
I believe I have to disconnect client which server has *first* written to (first in the queue of those not yet received callback) ? Does libuv maintains pending queue of streams anywhere (streams which callback hasn't received so far) ? Tnx, Ashish - -- > Saúl Ibarra Corretgé > bettercallsaghul.com > > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1 > Comment: Using GnuPG with Icedove - http://www.enigmail.net/ > > iQIcBAEBAgAGBQJTw4dZAAoJEEEOVVOum8BZQzMP/A7FV/Qz+G5Cim82TqZM2EcF > hjO6KWU7VarHjWJtaqyGxObge59UH9Dh7nSxLu9KIC8gat0YxB0O80bEu5NAh91Z > dJDoFVYB53JTJ+8+eXqEumRKHVM9TOiNSLRkKH/IhwKxT6Z9ZUonHBN8zAVhs7jC > WlP+7enJ+7emLdih93icY6lSLWpg91pQXRzqYOdnzMdMYkgMiZbrQmSDLGfe2KCC > 6fzwslJBgPpoBcjs4FdpvBqF5JUguDGBoN5LJq5G800WhYCqsYQ+yaTlbIxlpqUM > KorZxmKkQacQy45CN/Kr4jNv/8YPgSDTIbXG9W9uDQjqWLyCrXCAaTxKnEKJrwN8 > jfoEslYlnLivYPkhPSJJvQ8HCutb37I4Md+8u7TmOnL1XeQRHoC+cRybe4C6mBAP > cec+5vFoGZkYMEO6Cxc6jfGAPx7+3iSY5ZtzFUkloOk3VZVQPbf6ytPRbdFO6PY0 > xweeyU3E8LPHf3fSU4IdEPZ8Unp6fXzMFupXOIHHzw6bTiP0+q1TXASDvPmvdDwp > fcYLYvKNXOTFXKJGV1zr5bln4x8rg8P8H8LgLunhSvYm0LPkJ58A9+Sepk7sFjdf > 2iF5CC3yaZ6SBLen+aS3CHEcPS1ZrUH9rfNsp4ej4qXkP/Zxf9cUQJmQgfd2oU7b > EjTPOfJpR1x9P0nPMTnr > =tmf/ > -----END PGP SIGNATURE----- > -- You received this message because you are subscribed to the Google Groups "libuv" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/libuv. For more options, visit https://groups.google.com/d/optout.
