FrontPage 新規 編集 検索 一覧 ヘルプ

Diary/2006-8-22

ソケット通信を試してみた

68でネットワーク・プログラミングなど試してみようかと、X68000 LIBRARYソフトウェア と、桑島技研Online桑島技研ARCHIVESNereid特設ページより、開発ツール&ライブラリを入手して四苦八苦してました(^^;

とりあえず、簡単なソケット通信のサンプルを・・・ということで、クライアントから文字列送信し、サーバでそれを受け取り送り返すというよくある物を試しましたが、戻ってくる文字列がめちゃくちゃで全然使えず (--;

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]