zig network
1.0.0
TCP と UDP を中心とした小規模なネットワーク抽象化レイヤー。
select
/ poll
によるブロッキングおよびノンブロッキング I/O をサポートbuild.zig.zon
:
.{
. name = "appname" ,
. version = "0.0.0" ,
. dependencies = .{
. network = .{
. url = "https://github.com/MasterQ32/zig-network/archive/<COMMIT_HASH_HERE>.tar.gz" ,
. hash = "HASH_GOES_HERE" ,
},
},
}
(ハッシュを取得するには、 .hash
含む行を削除してください。コンパイラはどの行を元に戻すかを指示します)
build.zig
:
exe . addModule ( "network" , b . dependency ( "network" , .{}). module ( "network" ));
const network = @import ( "network" );
test "Connect to an echo server" {
try network . init ();
defer network . deinit ();
const sock = try network . connectToHost ( std . heap . page_allocator , "tcpbin.com" , 4242 , .tcp );
defer sock . close ();
const msg = "Hi from socket! n " ;
try sock . writer (). writeAll ( msg );
var buf : [ 128 ] u8 = undefined ;
std . debug . print ( "Echo: {}" , .{ buf [0 .. try sock . reader (). readAll ( buf [0 .. msg . len ])]});
}
非同期 I/O を使用して小規模な TCP サーバーを作成する方法のより完全な例については、async.zig を参照してください。
すべての例をビルドします。
$ zig build examples
具体的な例を構築します。
$ zig build sync-examples
例をテストするには、たとえば、 echo
:
$ ./zig-out/bin/echo 3000
別の端末で
$ nc localhost 3000
hello
hello
how are you
how are you
Windows では、プログラムのルート ファイルでio_mode = .evented
が設定されている場合、受信および送信関数の呼び出しは非同期であり、標準ライブラリのイベント ループと連携します。
他の通話 (接続、リッスン、受け入れなど) がブロックされています。