¼ÒÄÏ ÇÔ¼ö ¿¹Á¦
<?php
function __mksock()
{
static $bsize = 1048576; // socket send/receive buffer size(Bytes)
static $timeout = array('sec'=>0,'usec'=>500000);
## make socket
if(!$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP))
{
error_log("ERROR: unable to socket_create(): ".__FILE__,0);
return;
}
@socket_set_option($sock,SOL_SOCKET,SO_SNDBUF,$bsize);
@socket_set_option($sock,SOL_SOCKET,SO_RCVBUF,$bsize);
@socket_set_option($sock,SOL_SOCKET,SO_RCVTIMEO,$timeout); // good idea for
blocking mode
@socket_set_option($sock,SOL_SOCKET,SO_SNDTIMEO,$timeout);
@socket_set_option($sock,SOL_SOCKET,SO_REUSEADDR,1); // add 2009.01.24
@socket_set_option($sock,SOL_SOCKET,SO_KEEPALIVE,1); // add 2009.01.24
//@socket_set_option($sock,SOL_SOCKET,SO_DEBUG,1); // add 2009.01.24
//@socket_set_option($sock,SOL_SOCKET,SO_OOBINLINE,1); // add 2009.01.26
@socket_set_nonblock($sock); // set to non-blocking mode
return $sock;
}
function __socket_connect(&$sock, $server, $port)
{
$_time = time();
while(1)
{
@socket_connect($sock,$server,$port); // 114 Operation already in progress
$s = @socket_last_error($sock);
if($s==56 || $s==106) { return TRUE; break; }
else if((time()-$_time) >= 3)
{
error_log("ERROR: timeout, unable to socket_connect($sock,$server,$port):
".__FILE__,0);
return; break;
}
}
return;
}
function __socket_request(&$sock, $req)
{
return @socket_write($sock,$req);
}
function __socket_read(&$sock, $timeout=10)
{
static $bsize = 1048576;
$_time = time();
$stream = array($sock);
while(@socket_select($stream,$write=NULL,$except=NULL,0,500000) !== FALSE)
{
if($timeout && (time()-$_time > $timeout))
{
return $rbuf;
break;
}
while($buf = @socket_read($sock,$bsize,PHP_BINARY_READ))
{
if(!trim($obuf.$buf))
{
//@socket_read($sock,$bsize,PHP_NORMAL_READ); // seek 1 bytes
break; // end of header
}
$rbuf .= $buf; $obuf = $buf;
}
break; // require
}
unset($stream,$buf);
return $rbuf;
}
?>
|