forked from boostorg/beast
e3ee23bcfd03ba948f3b170c6ac39609a1774b93
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%