今まで全部。

前回

コメントは こちらへ

ここの更新調査ページ に捕捉されています。 これらのページに関する意見に関しては断りなく公開される場合があります。

なお、このページは見出しレベル1(<h1>)の所のリンクが元ファイルと なっており、そちらへは*基本的*にURLの変更はありません。よって、リンクは そちらにしてください。


20031220.html

ng_ksocket

Netgraphでtcpのサーバを実装する話。

マニュアルページを読んでいると、listenすることができるけれども、 incoming connectionをacceptしようとすると、

     NGM_KSOCKET_ACCEPT
          Currently unimplemented.
とか書いてあってできない事になっていますが、実は実装されています。

ngctlを対話的に使い、

+ mkpeer ksocket foo inet/stream/tcp
+ msg foo bind inet/0.0.0.0:4567
と行う事で、netstat -af inetの結果に
tcp4	0	0	*.4567		*.*	CLOSED
と出て来ます。

ここで、ngctlのセッションで

+ msg foo listen 5
と打つとnetstat -af inetの結果が
tcp4    0       0       *.4567          *.*     LISTEN
となります。

ここでngctlのセッションで

+ msg foo accept
と打ち、 telnet localhost 4567でつなぎに行くと
Rec'd response "accept" (3) from "[7]:":
Args:  {nodeid= 0x7 addr = {len=16 family=2  }
と出て来ます。ここで別のngctlのセッションを作成し、
+ connect [7]: foo inet/stream/tcp
と打ち、telnetセッションから適当に文字を打つと
Rec'd data packet on hook "foo":
0000: 70 6a 0d 0a                        po..
のように出て来ます。
+ write foo 0x54 0x42
と言うかんじで、バイト列を渡す事で、サーバ側の返答が可能で、 ここで、telnetのセッションを切るかngctlを終らすか
+disconnect foo
とすることで、双方のセッションが切れます。

但し、結構、lock order reversal 等のバグがのこってい るっぽいです。