コンテンツにスキップ

サーバーのフラグ

同じサーバーを、シングルスレッド、複数スレッド、複数プロセス、AF_XDP(Linux の高速パケット処理用のソケット)のいずれでも動かせます。 wired_srvdriver_parse は、どれを使うかをコマンドラインから読み取ります。 このページでは --cores 0,1 で CPU 0 と 1 にワーカースレッドを一つずつ起動し、TLS ハンドシェイクを 3 回受けます。

コード

main.c
#define WIRED_MAIN
#include "wired.h"
/* Unused here: the client below only does TLS handshakes, no requests. */
static int on_request(
void* ctx,
const wired_h3reqdrive_req* req,
u64 offset,
wired_obuf* body_out,
const char** content_type,
int* more,
u64* total_size) {
(void)ctx;
(void)req;
(void)offset;
(void)body_out;
(void)content_type;
(void)more;
(void)total_size;
return 0;
}
int wired_main(int argc, char** argv) {
/* The same fixed demo identity as the HTTP/3 hello page. */
static wired_srvboot_demo_keys keys;
wired_srvboot_id id;
wired_srvboot_demo(&id, &keys, 0x50, "guide-h3");
/* --port, --workers, --cores, --ifindex, ... pick and configure a driver. */
wired_srvdriver_opt opt = {0};
if (!wired_srvdriver_parse(argc, argv, &opt)) {
wired_log_str("bad flags\n");
return 2;
}
wired_srvrun_handler h = {.cb = on_request};
wired_srvrun_obs obs = {0};
return wired_srvdriver_run(&id, h, obs, &opt) < 0 ? 1 : 0;
}

実行結果

Terminal window
$ ./quic-server-flags --port 4433 --cores 0,1
conn closed by peer (CONNECTION_CLOSE)
conn closed by peer (CONNECTION_CLOSE)
conn closed by peer (CONNECTION_CLOSE)
Terminal window
$ probe tls 127.0.0.1:4433 3
handshake 1 ok: TLS 1.3
handshake 2 ok: TLS 1.3
handshake 3 ok: TLS 1.3
  • wired_srvdriver_parse(argc, argv, &opt) は --port、--workers、--cores、--ifindex、--pin-core などのフラグを wired_srvdriver_opt に読み込みます。 値が不正なときや、--workers と --cores のように両立しない組み合わせのときは 0 を返します。
  • wired_srvdriver_run(&id, h, obs, &opt) は opt.kind が示すドライバーを起動します。 ドライバーは、単一プロセス、--workers N で fork する複数プロセス、--cores 0,1 で指定した CPU ごとに一つのスレッド、--ifindex による AF_XDP のいずれかです。
  • 識別情報とハンドラーは、「はじめての HTTP/3」のページと同じものです。