dial(2)

rcでエコークライアントで,Plan9では,ネットワークをどのようにファイルとして扱っているか書いたけど,プログラミングインタフェースとしてはソケットに代わるどのようなAPIを提供しているのだろうか.

それが,dial(2)である.

int   dial(char *addr, char *local, char *dir, int *cfdp)

使い方は至って簡単で,こんな感じである.通常dialの第一引数の文字列は,netmkaddr(2)を使って生成する.

fd = dial("tcp!12.34.56.78!9000", 0, 0, 0);
n = write(fd, buf, sizeof(buf));
read(1, buf, n);

一方、サーバ側では、listenソケットのオープンに相当するannounce(2)を使う。listen/acceptは同じ。

int   announce(char *addr, char *dir)

使い方は、

afd = announce("tcp!*!9000", adir);
lfd = listen(adir, ldir);
fd = accept(lfd, ldir);
read(fd, buf, sizeof(buf));