[PHP-users 17035]Re: UDPブロードキャストを受け取るには?

KOYAMA Tetsuji koyama @ hoge.org
2003年 7月 29日 (火) 16:16:22 JST


  小山です。ご苦労様です。

At Tue, 29 Jul 2003 15:55:16 +0900,
Osamu Shigematsu wrote:
> 日本語マニュアルでサンプルとして示されている、簡易 TCP/Server だとか、
> socket_bind() の戻り値を int として評価し、負数の場合エラーとして
> 処理していますが、私の環境では、var_dump() したところ、
> bool が帰り、成功時に true, そうでないときには false のようです。

  socket 関数の日本語マニュアルはちょっと古いもののようで、現時点では
かなり間違ったことが書かれていますね。翻訳されている方には申し訳ないの
ですが、私は不審に思ったときには必ず英語マニュアルをあたるようにしてい
ます。英語マニュアルでは

	bool socket_bind(resource socket, string address [,int port])

となってますね。

  socket 関数でエラーになったときには

	socket_strerror(socket_last_error())

でエラーの原因を表示させた方が、解決の糸口になってよいですよ。

# すいません、前回のサンプルコードでは socket_strerror の使い方が間違っ
# てました。

> のようにしていますが、時々受信できないです。
> # 常にでないところがものすごく性質が悪いきがします...。

  エラーになっているのは socket_bind だけですか?
  だとすると EADDRINUSE (Address already in use) の可能性が高いです。
前回使用したポートがまだ使われているものだとして bind がエラーになる現
象です。

  これを回避するには、socket_bind の前に

	socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);

を呼んでおきます。

-- 
	小山 哲志@ビート・クラフト
	koyama @ beatcraft.com
	koyama @ hoge.org


PHP-users メーリングリストの案内