壊れたメガネ

ホッチキスの達人の意識の高いブログ。

JavaでUnix domain socketを使ったエコーサーバー

引き続きプロセス間通信のお勉強をしています。


プロセス間通信ということで、ありきたりかもしれませんがエコーサーバーを作ってみることにしました。


私がやりたいと考えていることは、あるプロセスとJavaプロセスのUnix domain socketを用いた通信です。
まずCでエコーサーバー書いてみてそれをJavaで書き直すという手順を踏みました。


このエコーサーバーを書く際にUNIXドメインのプロセス間通信プログラムの例を教科書にさせてもらいました。
エコーサーバーのプログラムはこのページにあるserver.cを書き換えてみたものです。
エコーサーバーの動作を確認するためのクライアントプログラムはclient.cをそのまんま使わせてもらいました。


ダウンロード
(Linux マシンの Java で Unix Domain Socket を用いたコードを書きたいと思っている方へ。)


これらソースコードの構築について
tarボールを展開してmakeを実行するとdistディレクトリが作られ、その中に構築したオブジェクトファイルが出来ているはずです。
私自身makeについて全然分かっておらず、NetBeansが生成したMakeファイルをそのまんま流用しています。
近いうちにでも調べてみようと思います。


問題点
Javaで書いたUnixDomainSocketServer4について、クライアントから接続があるとacceptしてforkします。
そこで生成された子プロセスは親プロセスが終了しても消えずにゾンビプロセスとして残りつづけます。
この問題は親プロセスがSIGCHLDシグナルを捕捉出来ないために起こります。
なぜSIGCHLDシグナルを捕捉していないのかというと、現在の私にとってそれが難しいためです。
仮にjniでインターフェースを定義したとしても、JVMもシグナルを補足している為、それによる競合ちっくなことが起きるらしいです。それでとりあえずは諦めることにしました。