公式にはまだないようですが、なんとなく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;
}
//-------------------------
}