🧺

ZigでUDP通信を行うサンプルプログラム

2022/12/22に公開

本記事はZigアドベントカレンダー22日目の記事です。

Zigの標準ライブラリのstd.netでは現状サポートされているのはTCPとUNIXドメインソケットだけで、UDPはまだありません。なので、システムコールを直接たたいてUDP通信をしてみました。

こちらのC言語で書かれているサンプルを参考にして、Zigで書きました。
https://www.geeksforgeeks.org/udp-server-client-implementation-c/

サーバ側のサンプル

クライアント側のサンプル

クライアント側をライブラリ化

先日書いたZigでTCP通信を行うサンプルプログラムをまねて、クライアント側に関してはtcpConnectToAddress()のところをudpConnectToAddress()に変更するだけで同じように使えるようにインタフェースを直してみました。

思ったよりあっさりとできました。
そして、これを利用するように修正したクライアント側のサンプルはこちら。

次はこれを使って何か作ってみようと思います。
tftp RFC1350のクライアント側だけならできそうかな。

配列からスライスを生成する方法

配列var buf: [SIZE]u8 から同じサイズのスライスを生成するのにbuf[0..] と書いていたのですが、これは &buf と書けることに気がつきました。

関連

https://zenn.dev/tetsu_koba/articles/f95680442d0a8e

Discussion