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: 接続オブジェクト。
conn、read、および close 関数を持つレコードを返します。
fun writer(conn)
接続用の汎用ライターストリームを作成します。
conn: 接続オブジェクト。
conn、write、および close 関数を持つレコードを返します。