TCP echo server

これは、ポート8080で接続を受け入れ、送信したものをクライアントに返すサーバーの例です。

const listener = Deno.listen({ port: 8080 });
console.log("listening on 0.0.0.0:8080");
for await (const conn of listener) {
  Deno.copy(conn, conn);
}

このプログラムを起動すると、PermissionDeniedエラーがスローされます。

$ deno run https://deno.land/std@0.65.0/examples/echo_server.ts
error: Uncaught PermissionDenied: network access to "0.0.0.0:8080", run again with the --allow-net flag
► $deno$/dispatch_json.ts:40:11
    at DenoError ($deno$/errors.ts:20:5)
    ...

セキュリティ上の理由から、Denoは明示的な許可なしにプログラムがネットワークにアクセスすることを許可していません。ネットワークへのアクセスを許可するには、コマンドラインフラグを使用します:

$ deno run --allow-net https://deno.land/std@0.65.0/examples/echo_server.ts

テストするには、netcatを使用してデータを送信してみてください。

$ nc localhost 8080
hello world
hello world

cat.tsの例と同様に、ここでのcopy()関数も不要なメモリコピーを作成しません。それはカーネルからパケットを受信し、さらに複雑にすることなく送り返します。