This repository has been archived on 2023-11-05. You can view files and clone it, but cannot push or open issues or pull requests.
wasm-micro-runtime/samples/socket-api
Wenyong Huang 9c87a1ee17
Implement part of Berkeley Socket API for libc-wasi (#1036)
Refer to [Networking API design](https://github.com/WebAssembly/WASI/issues/370)
and [feat(socket): berkeley socket API v2](https://github.com/WebAssembly/WASI/pull/459):

- Support the socket API of synchronous mode, including `socket/bind/listen/accept/send/recv/close/shutdown`,
    the asynchronous mode isn't supported yet.
- Support adding `--addr-pool=<pool1,pool2,..>` argument for command line to identify the valid ip address range
- Add socket-api sample and update the document
2022-03-10 15:13:38 +08:00
..
wasm-src Implement part of Berkeley Socket API for libc-wasi (#1036) 2022-03-10 15:13:38 +08:00
CMakeLists.txt Implement part of Berkeley Socket API for libc-wasi (#1036) 2022-03-10 15:13:38 +08:00
README.md Implement part of Berkeley Socket API for libc-wasi (#1036) 2022-03-10 15:13:38 +08:00

"socket-api" sample introduction

This sample demonstrates how to use WAMR socket-api to develop wasm network applications. Two wasm applications are provided: tcp-server and tcp-client, and this sample demonstrates how they communicate with each other.

Preparation

Please install WASI SDK, download the wasi-sdk release and extract the archive to default path /opt/wasi-sdk. And install wabt, download the wabt release and extract the archive to default path /opt/wabt

Build the sample

mkdir build
cd build
cmake ..
make

The file tcp_server.wasm, tcp_client.wasm and iwasm will be created. And also file tcp_server and tcp_client of native version are created.

Note that iwasm is built with libc-wasi and lib-pthread enabled.

Run workload

Start the tcp server, which opens port 1234 and waits for clients to connect.

cd build
./iwasm --addr-pool=0.0.0.0/15 tcp_server.wasm

Start the tcp client, which connects the server and receives message.

cd build
./iwasm --addr-pool=127.0.0.1/15 tcp_client.wasm

The output of client is like:

[Client] Create socket
[Client] Connect socket
[Client] Client receive
[Client] 115 bytes received:
Buffer recieved:
Say Hi from the Server
Say Hi from the Server
Say Hi from the Server
Say Hi from the Server
Say Hi from the Server

[Client] BYE

Refer to socket api document for more details.