И это всё МОЁ

Здравствуйте,

Начал попытку изучить основы 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 понимает, или должен понимать, что все данные записаны и пора передавать команду следующей строчки кода ?

Как то вот такие вопросы получились, не судите строга пожалуйста :)








 ,