udp сокетами (асио). Будет ли сильно неправильно вместо udp::socket::async_send вызывать adio::post а внутри него вызвать socket::send?
Попробовал поковырять код буста но запутался в темплейтах. Вроде кажется что так или иначе механизмы под капотом одни и те же но прежде чем окунаться в неблагодарный труд по разматыванию темплейтов хотел спросить знатоков.
async_* вначале дождется, пока сокет будет готов к операции (в это время контекст/экзекьютор может выполнять дургие оперции), а только потом выполняет операциию. А просто send будет блокировать контекст/экзекьютор до тех пор, пока сокет не будет готов и пока выполняется сама операция.
Так а если запостить (asio::post) сенд в контекст где будет крутиться экзекьютор? Не должно же ничего блокироваться.
Будет заблокирован экзекютер. Его заблокирует ожидающий send.
А почему его async send не заблокирует? (Я так понял имелось ввиду что если из потока экзекютора его вызвать то все равно функция вернется сразу же а отправка завершится потом). Правильно ли я понимаю что колбек будет дергаться из потока экзекьютора?
потому что асиньк ожидает асинхронно. Когда операционная система скажет ASIO, что сокет готов, тогда ASIO и запустит операцию, после чего вызовект коллбек. Да.
Понял, спасибо, а не подскажете плиз, такие вещи можно узнать не через исходники или тесты?)
Обсуждают сегодня