Здравствуйте,
Начал попытку изучить основы boost asio и и сразу же появились вопросы :( Если есть возможность подскажите пожалуйста:
1)Я так и не могу понять, как работает функция read, то есть, как они понимает, что чтение пора завершать и передавать действие следующей строчке кода ? Единственно, что я смог заметить, это, если делать get http запрос в сторону сервера и указать Connection: close, то чтение read`ом происходит сразу и быстро, если же не указать Connection: close, то функция «чего то» ждет секунд 30 и только потом завершается. Из этого получаются еще вот такие вопросы: 2)Судя по всему функция read ждет отключения соединения со стороны сервера и только после этого считает, что все данные считаны, потому что у read_untill такой «проблемы» нет.
И иcходя из этого еще получаются вот такие вопросы: 3)Вообще по http 1.1, если я правильно понимаю, если не указать Connection: close, то сервер не должен закрывать соединение и должен его держать чуть ли не до второго пришествия, но в моем случае, соединение скорее всего закрывалось, хотя сервер и присылал «Connection: keep-alive», вопрос почему ? Или все таки это было не закрытие присоединения ?
4)И что такие вообще закрытие присоединения со стороны сервера , что это значит ? То есть, я создаю обьект boost socket, socket.open(), socket.conection() далее пишу в сокет, get запрос, пишу Connection: close, чтобы сервер закрыт соединение после того, как передаст всю инфу на мой get запрос, далее от сервера приходит так же Connection: close. Далее я проверю открыт ли мой сокет:
cout<< socket.is_open()<<endl;
И ответ: 1
то есть сокет открыт, что тогда такое Connection: close ??
5)Если в http 1.1 предусмотрен режим постоянного соединения, то, возвращаясь к самому первому вопросу, как работает read, как read понимает, или должен понимать, что все данные записаны и пора передавать команду следующей строчки кода ?
Как то вот такие вопросы получились, не судите строга пожалуйста :)