boost::asio
От: Аноним  
Дата: 09.06.11 13:07
Оценка:
Привет всем.

Недавно начал изучать буст. Никак не могу понять где ошибся. Есть такой участок кода:



unsigned short int cmd=1;
size_t size=99;

boost::array<boost::asio::const_buffer, 2> buffers =
{
   boost::asio::buffer(&cmd, sizeof(cmd)),
   boost::asio::buffer(&size,sizeof(size)),
};
boost::asio::async_write(csocket,buffers,
        boost::bind(&client::handle_write,
        this,
        boost::asio::placeholders::error));



дело в том что принимающая сторона отлично принимает cmd, а вот size — не может принять почему-то.
Даным кодом заменил последовательную отправку cmd и size


boost::asio::async_write(csocket,boost::asio::buffer(&cmd, sizeof(cmd)),
        boost::bind(&client::handle_write,
        this,
        ba::placeholders::error));

...
boost::asio::async_write(csocket,boost::asio::buffer(&size, sizeof(size)),
        boost::bind(&client::handle_write,
        this,
        boost::asio::placeholders::error));



До этого все работало, но хотелось отправить одним махом все части сообщения (участки кода приведенные здесь сильно упростил, но думаю смысл понятен).

Подозреваю что ошибка где-то в обьявлении buffers, но не могу понять где. Может всезнающий All подскажет где я ошибся, или посоветует как можно иначе отправить несколько буферов одной командой. Если уже где-то обсуждалось, прошу ткнуть носом, так как к сожалению поиск по сайту не работает (сильно обрезан доступ к сайтам с работы ((()
boost::asio
Re: boost::asio
От: DTB Россия  
Дата: 10.06.11 12:29
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Подозреваю что ошибка где-то в обьявлении buffers, но не могу понять где. Может всезнающий All подскажет где я ошибся, или посоветует как можно иначе отправить несколько буферов одной командой. Если уже где-то обсуждалось, прошу ткнуть носом, так как к сожалению поиск по сайту не работает (сильно обрезан доступ к сайтам с работы ((()


да вроде бы все ок, write_handler отрабатывает? сколько показывает отправленных байт?
Have fun...
Re: boost::asio
От: flamin  
Дата: 10.06.11 18:28
Оценка: +1
Насколько я помню, буфер с отправляемыми данными должен существовать до вызова handler_write.
Если переменные cmd и size — локальные, то на отправку может пойти что угодно
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.