Есть 2 бинарных программмы, общающиеся через локальные tcp-сокеты. Одна из них (сервер) всунута глубоко в android-приложение и её нужно переписать. Всё, что она делает - отвечает одинаковыми сообщениями.
Отловил сообщение через strace и пытаюсь в точности воспроизвести его. Используются sendmsg и recvmsg на обеих сторонах.
Но вот незадача: recvmsg на клиенте пытается принять 8 байт (таково значение iovec_len, а принимает только 6. То есть, strace показывает только 6 байт сообщения и резултат тоже равен 6
Если в sendmsg на написанном сервере указывать 8, то клиент успешно читает 8 байт и его это не устраивает.
Если указать 6, на клиент всё равно принимает 8, причём в последние 2 байта попадает начало сообщения, что его тоже не устраивает.
И ещё: какая-то старая версия strace показывала 8 байт и нули в конце, хотя результат всё равно 6. Видимо, там strace полагался на iovec_len.
Пробовал пробрасывать подключение к android через ssh, что исключает посторонние факторы, через него всё работает, так что дело именно в какой-то хитрой отправке сообщения
tcpdump в обоих случаях выдаёт, что длина сообщения 6.