forked from boostorg/beast
6f38d4ea212128a70bb6b159ceed8f3d587e15f2
Sometimes lcov would report negative counts. This may be related to lcov running while the job it was collecting counts for was also running. This patch makes two changes: Do not run the coverage build under gdb, and wait for all jobs to finish before running lcov.
Beast
![codecov]
(https://codecov.io/gh/vinniefalco/Beast/branch/master/graph/badge.svg) ![Documentation]
(https://img.shields.io/badge/documentation-master-brightgreen.svg)
Beast provides implementations of the HTTP and WebSocket protocols built on top of Boost.Asio and other parts of boost.
Requirements:
- Boost
- C++11 or greater
- OpenSSL (optional)
Example WebSocket program:
#include <beast/to_string.hpp>
#include <beast/websocket.hpp>
#include <boost/asio.hpp>
#include <iostream>
#include <string>
int main()
{
// Normal boost::asio setup
std::string const host = "echo.websocket.org";
boost::asio::io_service ios;
boost::asio::ip::tcp::resolver r(ios);
boost::asio::ip::tcp::socket sock(ios);
boost::asio::connect(sock,
r.resolve(boost::asio::ip::tcp::resolver::query{host, "80"}));
// WebSocket connect and send message using beast
beast::websocket::stream<boost::asio::ip::tcp::socket&> ws(sock);
ws.handshake(host, "/");
ws.write(boost::asio::buffer("Hello, world!"));
// Receive WebSocket message, print and close using beast
beast::streambuf sb;
beast::websocket::opcode op;
ws.read(op, sb);
ws.close(beast::websocket::close_code::normal);
std::cout << to_string(sb.data()) << "\n";
}
Example HTTP program:
#include <beast/http.hpp>
#include <boost/asio.hpp>
#include <iostream>
#include <string>
int main()
{
// Normal boost::asio setup
std::string const host = "boost.org";
boost::asio::io_service ios;
boost::asio::ip::tcp::resolver r(ios);
boost::asio::ip::tcp::socket sock(ios);
boost::asio::connect(sock,
r.resolve(boost::asio::ip::tcp::resolver::query{host, "http"}));
// Send HTTP request using beast
beast::http::request_v1<beast::http::empty_body> req;
req.method = "GET";
req.url = "/";
req.version = 11;
req.headers.replace("Host", host + ":" + std::to_string(sock.remote_endpoint().port()));
req.headers.replace("User-Agent", "Beast");
beast::http::prepare(req);
beast::http::write(sock, req);
// Receive and print HTTP response using beast
beast::streambuf sb;
beast::http::response_v1<beast::http::streambuf_body> resp;
beast::http::read(sock, sb, resp);
std::cout << resp;
}
Links:
Please report issues or questions here: https://github.com/vinniefalco/Beast/issues
Languages
C++
95.8%
C
2%
CMake
1.5%
Shell
0.4%
Dockerfile
0.2%