Skip to content

yasio Documentation

Release Docs Status

yasio is a multi-platform support c++11 library with focus on asio (asynchronous socket I/O) for any client application.

  • Languages:
  • Cross-platform:

    • Compiler:

      • Visual Studio 2013+
      • GCC4.7+
      • xcode9+
      • Other C++11,14,17 Compilers
    • Architecture: x86, x64, ARM and etc.

    • OS: Windows, macOS, Linux, FreeBSD, iOS, Android And etc.

Quick Start

This demo simply send http request to and print resposne data.

#include "yasio/yasio.hpp"
#include "yasio/obstream.hpp"
using namespace yasio;
using namespace yasio::inet;
int main()
    io_service service({"", 80});
    service.set_option(YOPT_S_DEFERRED_EVENT, 0); // dispatch network event on network thread
    service.start([&](event_ptr&& ev) {
        switch (ev->kind())
        case YEK_PACKET: {
            auto packet = std::move(ev->packet());
            fwrite(, packet.size(), 1, stdout);
            if (ev->status() == 0)
            auto transport = ev->transport();
            if (ev->cindex() == 0)
                obstream obs;
                obs.write_bytes("GET /index.htm HTTP/1.1\r\n");


                obs.write_bytes("User-Agent: Mozilla/5.0 (Windows NT 10.0; "
                                "WOW64) AppleWebKit/537.36 (KHTML, like Gecko) "
                                "Chrome/87.0.4820.88 Safari/537.36\r\n");
                obs.write_bytes("Accept: */*;q=0.8\r\n");
                obs.write_bytes("Connection: Close\r\n\r\n");

                service.write(transport, std::move(obs.buffer()));
            printf("The connection is lost.\n");
    // open channel 0 as tcp client, YCK_TCP_CLIENT);
local ip138 = ""
local service ={host=ip138, port=80})
local respdata = ""
        local k = ev.kind()
        if (k == yasio.YEK_PACKET) then
            respdata = respdata .. ev:packet():to_string()
        elseif k == yasio.YEK_CONNECT_RESPONSE then
            if ev:status() == 0 then -- connect succeed
                local transport = ev:transport()
                local obs =
                obs:write_bytes("GET / HTTP/1.1\r\n")

                obs:write_bytes("Host: " .. ip138 .. "\r\n")

                obs:write_bytes("User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36\r\n")
                obs:write_bytes("Accept: */*;q=0.8\r\n")
                obs:write_bytes("Connection: Close\r\n\r\n")

                service:write(transport, obs)
        elseif k == yasio.YEK_CONNECTION_LOST then
            print("request finish, respdata: " ..  respdata)
-- Open channel 0 as tcp client and start non-blocking tcp 3 times handshake
service:open(0, yasio.YCK_TCP_CLIENT)

-- Call this function at thread which focus on the network event.
function gDispatchNetworkEvent(...)
    service:dispatch(128) -- dispatch max events is 128 per frame

_G.yservice = service -- Store service to global table as a singleton instance

The tests & examples

  • tests:

  • examples:

    • ftp_server: A simple ftp server only support file download which is based on yasio,click to visit.
    • lua: lua test contains http request,TCP unpack test code.
    • xlua: Unity3D xlua Integration Demo.
    • DemoUE4: Unreal Engine 4 Integration Demo.

Build tests & examples

  • Ensure install compiler which support C++11, such as msvc, gcc, clang
  • Ensure git, cmake installed
  • Execute follow commands:
  git clone
  cd yasio
  git submodule update --init --recursive 
  cd build
  # for xcode should be: cmake .. -GXcode
  cmake ..
  cmake --build . --config Debug