公式にはまだないようですが、なんとなくdownloadして使ってみてるんですが、、、、、
とりあえず、、
fsockopen は必ずエラーになることがわかりました。
しょうがないので、こんな感じで、ベタな関数を使ってクラスをかきました。
ローレベルの関数は問題なく実行できたので、とりあえずはこれは使ってみます。。。。
そういえば、、readfile関数も微妙に怪しい。。。。。^^;^^;
class alexsock{ private $portn; private $address; private $sock; private $counter; //------------------------- /* 初期値 */ //------------------------- function __construct(){ $this->address = 'localhost'; $this->portn = 20002; $this->counter = 10; } //------------------------- function __destruct(){ // とりあえず特にやることなし。 } //------------------------- function setAddress($v){ $this->address = $v; } //------------------------- function setPort($v){ $this->portn = $v; } //------------------------- function create(){ $this->sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($this->sock === false) return false; return true; } //------------------------- function connect(){ $result = socket_connect($this->sock, $this->address, $this->portn); if($result === false) return false; return true; } //------------------------- function setNonblock(){ socket_set_nonblock($this->sock); } //------------------------- function setBlock(){ socket_set_block($this->sock); } //------------------------- function setWaitTime($milisec){ $this->counter = $milisec / 100; if($this->counter < 1) $this->counter = 1; } //------------------------- function close(){ socket_close ($this->sock); } //------------------------- function write($msg){ $writelen = socket_write($this->sock, $msg, mb_strlen($msg)); return $writelen; } //------------------------- function read($slen){ $readlen = socket_read($this->sock, $slen); return $readlen; } //------------------------- function readEx($slen){ for($w=0;$w<$this->counter;$w++){ if($readstr == false){ $readstr = socket_read($this->sock,$slen); if($readstr != false) return $readstr; usleep(100000); // マイクロ秒単位 } } return false; } //------------------------- // ありがちな準備 //------------------------- function alexPrepare($add="127.0.0.1",$portn=20002,$milisec=10000){ $this->setAddress($add); $this->setPort($portn); $this->setWaitTime($milisec); $b = $this->create(); if(!$b) return false; $b = $this->connect(); if(!$b) return false; $this->setNonblock(); return true; } //------------------------- }
0 件のコメント:
コメントを投稿