Diary/2006-8-22
ソケット通信を試してみた
68でネットワーク・プログラミングなど試してみようかと、X68000 LIBRARY の ソフトウェア と、桑島技研Online の桑島技研ARCHIVES とNereid特設ページより、開発ツール&ライブラリを入手して四苦八苦してました(^^;
とりあえず、簡単なソケット通信のサンプルを・・・ということで、クライアントから文字列送信し、サーバでそれを受け取り送り返すというよくある物を試しましたが、戻ってくる文字列がめちゃくちゃで全然使えず (--;
cygwin上で同じのをコンパイルして試すと、cygwin がサーバ、68 がクライアントなら問題なく動くのに、逆だと駄目なんですね。
何だろうなぁ・・・やはりサーバ側になるのは無理なのかなぁ・・・などと数日悩んでしまいましたが、結局のところ、read() が戻り値 -1 で返ってきてて、そもそも受信できてなかったというオチでした(^^;
cygwin上では read() ですぐに値が入ってくるのですが、Human68k上では受信データが read_s() で入ってくるまでに結構時間を要するんですね。socklen() や errno などを見つつ、read_s() の戻り値が -1 でも処理を続行するように(読み出しを続けるように)したら何とか動きました。
socket1.LZH ←いい加減な作りですがとりあえず
ただ、cygwin 上では、何もデータが入ってこなかった場合には戻り値は 0 になるので、read_s() でこの場合に -1 が戻ってくるのは変だなぁと思うんですけどね。(どこかに対策ライブラリとかパッチとかあるのかな?)
なお、NetBSD/x68k で同じプログラムをコンパイルした場合には、受信に時間がかかるなんて事はありませんし、read() の戻り値もまったくもって正常ですので、念のため。
[カテゴリ:x68]