Petite couche d'abstraction réseau autour de TCP et UDP.
select
/ poll
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" ,
},
},
}
(Pour acquérir le hash, merci de supprimer la ligne contenant .hash
, le compilateur vous indiquera alors quelle ligne remettre)
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 ])]});
}
Voir async.zig pour un exemple plus complet sur la façon d'utiliser les E/S asynchrones pour créer un petit serveur TCP.
Construisez tous les exemples :
$ zig build examples
Construisez un exemple spécifique :
$ zig build sync-examples
Pour tester un exemple, par ex. echo
:
$ ./zig-out/bin/echo 3000
dans un autre terminal
$ nc localhost 3000
hello
hello
how are you
how are you
Sous Windows, les appels de fonction de réception et d'envoi sont asynchrones et coopèrent avec la boucle d'événements de bibliothèque standard lorsque io_mode = .evented
est défini dans le fichier racine de votre programme.
Les autres appels (connecter, écouter, accepter, etc.) bloquent.