2009-08-04 15 views
8

Jaka jest różnica między wywołaniem boost::asio::ip::tcp::socket „s read_some/write_some funkcji składowych i wywołanie boost::asio::read/boost::asio::write bezpłatne funkcje?boost :: asio operacji odczytu/zapisu

Dokładniej:

Czy istnieje korzyści przy użyciu jednego nad drugim?

Dlaczego oba są uwzględnione w bibliotece?

Odpowiedz

13

read_some i write_some mogą powracać, gdy tylko jeden bajt zostanie przesłany. W związku z tym musisz zapętlić, jeśli chcesz mieć pewność, że otrzymujesz wszystkie dane - ale może to być to, czego potrzebujesz.

Darmowe funkcje są owijkami wokół read_some i write_some i mają różne warunki zakończenia w zależności od przeciążenia. Zwykle czekają na pełne przesłanie bufora (lub wystąpienie błędu, lub w przypadku niektórych przeciążeń wystąpi wyraźny warunek zakończenia).

+0

Ale dlaczego uwzględnić oba? –

+0

Robią różne rzeczy (różne warunki wypowiedzenia). Odpowiednio zredagowałem swoją odpowiedź, mam nadzieję, że teraz jest jaśniej. – bdonlan

Powiązane problemy