Мы работаем с Библиотека каналов данных C ++ webrtc и в нашем тестовое приложение, при отправке нескольких небольших пакетов, которые в сумме составляют около 256 КБ, usrsctp_sendv()
вызов возвращает -1 (с ошибкой как EWOULDBLOCK/EAGAIN
что означает «Ресурс временно недоступен»). Мы считаем, что это потому, что мы достигли предела буфера отправки usrsctp, который по умолчанию составляет 256 КБ. Мы попытались добавить несколько задержек сна между каждым вызовом отправки, надеясь, что он очистит этот буфер, но ничего не работает.
Принимающая сторона (веб-страница JS) действительно получает все байты, которые мы отправили, до тех пор, пока не произойдет ошибка. Стоит также отметить, что это происходит только тогда, когда мы пытаемся отправить данные из приложения C ++ в JS, а не наоборот. Мы пытались смотреть вокруг Мозиллы datachannels реализации, но не могу сделать какие-либо выводы о том, что проблема может быть.
Сложно сразу ответить на такой вопрос. Я бы начал изучать следы Wireshark, чтобы увидеть, действительно ли ваша удаленная сторона (JS-страница) действительно подтверждает отправленные вами данные (например, если блоки SACK отправляются обратно) и каково значение принятого буфера (a_rwnd), сообщаемого в этих SACK. Возможно, это не проблема на вашей стороне, но вы получаете EWOULDBLOCKS только потому, что SCTP отправляющей стороны не может очистить данные из буферов, потому что он все еще ожидает подтверждения доставки с удаленного конца.
Пожалуйста, предоставьте более подробную информацию о вашем случае, а также, если это возможно, предоставьте пример кода для вашей страницы JS.
Других решений пока нет …