C#, TCP Socket, Как узнать состояние буфера приема/отправки?
Коллеги, добрый день!
Пишу аналитическую обвязку для работающего клиент/серверного приложения.
Один из пунктов прямо поставил меня в тупик, нужно определить состояние (на сколько занят) буферы (Очереди), приема/отправки сообщений.
Приложение многопоточное, сразу несколько потоков вызывают метод Socke.Send(), который в свою очередь на уровне сокета складывает эти сообщения в очередь (прошу прощения за тафтологию) и готовит к отправке.
С помощью метода Socket.SendBufferSize(), мы можем установить размер буфера отправки сообщений, но мне интересно на сколько этот буфер занят в конкретный момент времени, и если очередь отправки начинает копиться и буфер заполняется, но выдать об этом сигнализацию
А для чего вам это нужно знать, если не секрет?
— Если данные в буфере есть, их надо читать, независимо от того, сколько их там.
— Если место в буфере ещё есть, соответственно, в него надо писать.
Для каких целей вам нужно просто знать этот размер? На уровне приложения знать размер абсолютно бесполезно.
Я же написал, что для того, чтобы сигнализировать ответственным людям в случае если место в этом буфере по какой-либо причине начнет подходить к концу. Причин этому может быть довольно много, начиная от резко возросшего количества запросов на отправку и заканчивая проблемами на уровне сети, при которых сообщения не отправляются, либо отправляются с задержкой.