Возможно ли использовать asio для Boost as non-blocking IO без использования асинхронных обратных вызовов? I.e. что эквивалентно опции разъема O_NONBLOCK
.Boost asio non-blocking IO без обратных вызовов
Я в принципе хочу эту функцию:
template<typename SyncWriteStream,
typename ConstBufferSequence>
std::size_t write_nonblock(
SyncWriteStream & s,
const ConstBufferSequence & buffers);
Эта функция будет писать столько байт, как это может и немедленно вернуться. Он может писать 0 байт.
Возможно ли это?
* Как * он мог «вернуть» количество байтов, записанных, если оно немедленно возвращается? Как бы вы могли узнать, были ли отправлены данные или нет? Если есть ошибки? Это невозможно без каких-либо обратных вызовов. –
Он записывает их во внутренний буфер. Взгляните на 'O_NONBLOCK'. – Timmmm
Я знаю о неблокирующих сокетах, интересно, как бы вы сказали программе, что вызов 'write' преуспел или не удался, если вы не хотите использовать обратные вызовы. И как бы вы даже знали, когда функция 'write' была закончена без какого-либо опроса? Вы сделаете это в основной программе? Опросить какой-то буфер состояния? Асинхронное программирование не так просто, как «вызов неблокирующей функции, а затем продолжить мой веселый путь». –