Net_Socketはphpライセンスなので改変済みのconnectのコードの一部を張ってみた。
元のコードはこんな感じ。http://pear.php.net/package/Net_Socket/docs/latest/__filesource/fsource_Net_Socket__Net_Socket-1.0.9Socket.php.html
全部貼る必要もないしpatchつくっても、きっと元コードがバージョンアップされるだろうしなー
<?php // $typeを追加 function connect($addr, $port = 0, $persistent = null, $timeout = null, $options = null, $type= null) { if (is_resource($this->fp)) { @fclose($this->fp); $this->fp = null; } if (!$addr) { return $this->raiseError('$addr cannot be empty'); } elseif (strspn($addr, '.0123456789') == strlen($addr) || strstr($addr, '/') !== false) { $this->addr = $addr; } else { $this->addr = @gethostbyname($addr); } $this->port = $port % 65536; if ($persistent !== null) { $this->persistent = $persistent; } if ($timeout !== null) { $this->timeout = $timeout; } // $typeがあったらアドレスの先頭に繋げる if ($type !== null) { $this->addr = $type . $this->addr; //echo $this->addr; } /* 省略 */ }
エラーチェックは完全に何もしてないけど対応できた。この件に関してちょっとググったところだと
[PHP-users 17021]Re: UDPブロードキャストを受け取るには?
の一文、
Net_Socket も見てみましたが、これは完全に TCP しか相手にしてないです ねぇ。
と妙なことをいう人は昔からいるようだ。なんで開発元はラッパの指定を出来ないようにしてるんだろ?不思議だな。