Back to Wasmedge

Unix Domain Socket With WasmEdge C API

examples/capi/unix_domain_socket/README.md

0.16.21.7 KB
Original Source

Unix Domain Socket With WasmEdge C API

Introduction

  • WasmEdge
    • Wasi Socket in UNIX Domain Socket with address V2

Tutorial

WasmEdge Installation

Please follows the installation step to install WasmEdge.

Emscripten Installation

Please follow the installation step to install Emscripten Compiler Frontend (emcc)

The Socket C++ Program to WASM

An example signal thread server and a simple client are provided. The header file wrapper.h provided the sock_*_v2 function signature let emcc to generate the api import.

The Unix Domain Socket use file path as input address, therefore the address format V2 are required. Unlike the address V1 has only 4 or 8 bytes. The address has fixed 128 bytes storage and make it large enough to store the unix path.

bash
address V2 format
|01             |23456789...127|
|address family |address buffer|

Compile C++ into WASM

Use emcc to compile a c++ program to WASM. Add option ERROR_ON_UNDEFINED_SYMBOLS=0 to generate the customize module import.

bash
emcc server.cpp -o server.wasm -sERROR_ON_UNDEFINED_SYMBOLS=0 -sSTANDALONE_WASM
emcc client.cpp -o client.wasm -sERROR_ON_UNDEFINED_SYMBOLS=0 -sSTANDALONE_WASM

Results and Evaluation

Try to input a string in client. The example server will return a reversed string to client.

Client

bash
$ Wasmedge
Server: egdemsaW
$ egdemsaW
Server: Wasmedge
$ Was it a car or a cat I saw?
Server: ?was I tac a ro rac a ti saW

Server

bash
Client: Wasmedge
Client: egdemsaW
Client: Was it a car or a cat I saw?