HTTP - это протокол, поэтому он не является блокирующим или неблокирующим. Единственное, что напоминает «блокирующее поведение» в HTTP, это то, что вы не можете отправлять два запроса или два ответа одновременно в одном конвейере - вы должны дождаться завершения запроса, прежде чем отправлять другой.
Таким образом, ваш реальный вопрос о блокирующих операциях должен касаться CURL - разрешает ли он неблокирующий ввод-вывод?
Ответ заключается в том, что в libcurl есть нечто, называемое «мультиинтерфейс», что позволяет использовать его без блокировки:
http://curl.haxx.se/libcurl/c/libcurl-multi.html
Если вы предпочитаете библиотеку, которая лучше подходит для асинхронного ввода-вывода, вы можете проверить Boost.ASIO. Я никогда не использовал это сам, но это кажется популярным:
http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio.html