ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
12 июля
1529794
CaйpycCмит (Вчера, 14:59, просмотров: 163)
Знатоки LWIP, подскажите. 

Делаю отправку через вебсокет на вебморду устройства копию экрана. Использую raw tcp, при открытии порта делаю tcp_nagle_disable, TCP_MSS задан 1460.

Данных может быть много, десятки кб, если перерисовывается весь экран, и допустим пара кб, если перерисовывается только часть экрана.

Так вот когда данных много, все хорошо: идут два подряд пакета размером с TCP_MSS, комп тут же шлет ACK, тут же вызывается callback tcp_sent, где отправляется новая пачка данных, снова два пакета и тд.

А когда данных около 2 кб, то происходит странное: отправляется два пакета, в Wireshark видно что тут же прилетает ACK, но коллбек tcp_sent вызывается только через примерно 0,5 секунды.

Соответственно возникает дикий тормоз, т.к. за эти 0,5 сек уже давно есть новые данные, и надо бы их отправить.

Сделал TCP_TMR_INTERVAL равным 100 вместо 250, задержка стала 0.2 с, т.е. tcp_sent вызывается не по факту прихода ACK, а по медленному таймеру.

Что за дичь и как с этим бороться?