С этими знаками вопроса не очень ясно, что собой представляет "tg^2?"
Если просто подставить бету, получится хрень - tg^2b. Сейчас у вас в коде tg(2b)^2. Может нужно tg(b)^2, а может tg(b^2), фиг поймёшь
Отправка и получение данных ведь независимо ведутся. В один буфер всё приходит, из другого отправляете.
Может быть ситуация, когда в входящем буфере окажется полтора ответа. Один ответ следует обработать и удалить из буфера, остаток оставить и ждать, пока будет получена оставшаяся часть.
я использовал кольцевой буфер для минимизации операций копирования и выделения памяти. данные всегда принимались в один и тот же блок памяти, менялся лишь указатель (ходил "по кругу")
lightalex: я б принимал данные в буфер и парсил уже его.
1) как только в сокете появляются данные -> читаем в буфер
2) после каждого чтения проверяем, не сформировался ли в буфере полный HTTP заголовок
3) как только наберется заголовок, парсим и выкусываем его
4) аналогично по частям ждём, собираем и парсим JSON
5) повторяем всё с начала - ждём новый HTTP заголовок и так далее
lightalex: ну вообще он сказал, что закроет соединение после передачи (Connection: close), потому content-length не обязателен (принимать всё до закрытия сокета). Возможно, у вас не просто по таймауту вылетает, а сокет давно закрыт, но программа ждёт данных? Проверьте в том же Wireshark, закрывается ли соединение сразу после передачи JSON. Если да, то усилия напрасны.
в случае keep-alive соединений без content-length никак (чтоб разделить порции данных).
Не используйте transfer_all, вручную обрабатывайте весь входящий поток. например, заголовок HTTP запроса имеет явные начало и конец, в заголовке же указывается точный размер тела запроса. уже из этого вы точно можете определить, когда следует прекращать приём данных. Когда я писал взаимодействие по HTTP, сложным моментом была организация собственного буфера данных, когда принимается больше одного запроса, и первый нужно обрабоать немедленно, а другой поставить в очередь на дозагрузку и обработку. Вам это тоже придётся учитывать.
Wasya UK: какой вид для вас является нормальным? К сожалению, с веб языками я не знаком.
Предположу, что вам требуется
metadata.picture[0].data.toString('base64');
sdxq: если железо почти идентичное, то может и включится. 6575 очень медленный и старый проц. Я бы порекомендовал не морочить голову ремонтом и купить какой-нибудь Oukitel C5 за $50. Гораздо мощнее будет.