← Back to the index

Module std/net.vv

net モジュールは、システムレベルのネットワーク接続機能を提供します。

例:

import net from "std/net.vv"
import console from "std/console.vv"
import text from "std/io/text.vv"
import utf8 from "std/encoding/utf8.vv"

let client = try net.dial("tcp", "127.0.0.1:8080")
defer net.close(client)
let r = try text.reader(try net.reader(client), utf8)
// ...

Table of Contents

Exports

fun dial(network, address) extern "native"

ネットワークアドレスに接続します。

  • network: ネットワークプロトコル (例: "tcp", "unix")。
  • address: 接続先のアドレス。

結果 (result) でラップされた接続オブジェクトを返します。

fun listen(network, address) extern "native"

ネットワークアドレスでのリッスンを開始します。

  • network: ネットワークプロトコル (例: "tcp", "unix")。
  • address: リッスンするアドレス。

結果 (result) でラップされたリスナーオブジェクトを返します。

fun accept(listener, handler) extern "native"

リスナーへの着信接続をバックグラウンドで継続的に受け付けます。 新しい接続が来るたびに、その接続オブジェクトを引数として handler が呼び出されます。

  • listener: listen が返すリスナーオブジェクト。
  • handler: 各接続を受け取る関数 fun(conn)

すぐに None を返します。プログラムの残りの処理が続く間も、 バックグラウンドで接続の受付が続きます。

警告: ハンドラの中で外側の変数を変更しないでください

各ハンドラの呼び出しは、メインプログラムと同時に独立して実行されます。 ハンドラが外側で宣言された変数を変更すると、結果は予測不能になります — 値が壊れたり、プログラムが正しく動作しなくなる場合があります。

以下のコードは危険です:

let counter = 0
fun handler(conn)
    counter = counter + 1  // 危険: 値が壊れる可能性があります
end

代わりに、channel を使って結果をメインプログラムに送り返すか、 sync.mutex を使って共有変数を安全に保護してください:

安全なパターン 1 — channel (推奨):

import channel from "std/channel.vv"
let ch = channel.make()
fun handler(conn)
    // ... conn を処理 ...
    channel.send(ch, "done")
end
accept(listener, handler)
let result = try channel.recv(ch, 5000)

安全なパターン 2 — mutex:

import sync from "std/sync.vv"
let mu = sync.mutex()
let counter = 0
fun handler(conn)
    sync.lock(mu)
    counter = counter + 1
    sync.unlock(mu)
end

fun read(conn, n) extern "native"

接続からバイトを読み取ります。

  • conn: 接続オブジェクト。
  • n: 読み取るバイト数。

バイトのリストを含む結果 (result) を返します。

fun write(conn, bytes) extern "native"

接続にバイトを書き込みます。

  • conn: 接続オブジェクト。
  • bytes: 書き込むバイト (整数または文字のリスト)。

書き込まれたバイト数を含む結果 (result) を返します。

fun close(conn) extern "native"

接続またはリスナーを閉じます。

  • conn: 閉じる接続またはリスナーオブジェクト。

fun set_read_timeout(conn, timeout_ms) extern "native"

接続の読み取りタイムアウトを設定します。

  • conn: 接続オブジェクト。
  • timeout_ms: ミリ秒単位のタイムアウト (0 にするとタイムアウトが無効になります)。

fun set_write_timeout(conn, timeout_ms) extern "native"

接続の書き込みタイムアウトを設定します。

  • conn: 接続オブジェクト。
  • timeout_ms: ミリ秒単位のタイムアウト (0 にするとタイムアウトが無効になります)。

fun reader(conn)

接続用の汎用リーダーストリームを作成します。

  • conn: 接続オブジェクト。

connread、および close 関数を持つレコードを返します。

fun writer(conn)

接続用の汎用ライターストリームを作成します。

  • conn: 接続オブジェクト。

connwrite、および close 関数を持つレコードを返します。