Почему буфер исходящих данных EventMachine может перестать отправлять и просто заполняться навсегда (в то время как другие соединения все еще могут отправлять)

У меня есть сервер EventMachine, отправляющий данные TCP клиенту Mac (через GCDAsyncSocket). Какое-то время он всегда работает безупречно, но неизбежно сервер внезапно перестает отправлять данные при каждом подключении. Соединение по-прежнему поддерживается, и сервер по-прежнему получает данные от клиента, но не в обратном направлении.

Когда это происходит, я обнаружил через соединение # get_outbound_data_size, что буфер отправки соединения бесконечно заполняется (через #send_data) и не отправляется клиенту.

Есть ли конкретные (и, надеюсь, исправимые) причины, по которым это могло произойти? Реактор продолжает гудеть, а другие активные соединения с сервером продолжают работать нормально (хотя иногда они тоже попадают в буферный ад).

6
задан yves Baumes 22 February 2012 в 15:51
поделиться