好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

php socket如何设置超时

php socket设置超时的方法:首先如果【$waitAckSec=0】,则返回成功发送的字节;然后如果【$waitAckSec】大于0,则返回发送后接收到得内容;最后任何情况下,失败都返回FALSE。

【相关学习推荐: php编程 (视频)】

php socket设置超时的方法:

php创建socket的方法和设置超时的方法,贴出来分享一下

//如果$waitAckSec=0,则返回成功发送的字节
    //如果$waitAckSec大于0,则返回发送后接收到得内容
    //任何情况下,失败都返回FALSE
    function sendUdp($host, $port, $buff,$waitAckSec=0) {
   $socket = ($result = @socket_create(AF_INET,SOCK_DGRAM,SOL_UDP));
   //发送超时1秒
   socket_set_option($socket,SOL_SOCKET,SO_RCVTIMEO,array("sec"=>3, "usec"=>0 ) );
   //接收超时6秒
   socket_set_option($socket,SOL_SOCKET,SO_SNDTIMEO,array("sec"=>6, "usec"=>0 ) );
   if($socket){
  $result = @socket_sendto($socket,$buff,strlen($buff),0,$host,$port);
  if($waitAckSec>0){
 $result = FALSE;
 $read = array($socket);
 $write = NULL;
 $except = NULL;
 if(@socket_select($read,$write,$except,$waitAckSec)>0){
$fromHost = "";
$fromPort = 0;
@socket_recvfrom($socket,$result,4096,0,$fromHost,$fromPort);
$result = phpext_unpack($result);
if($result["needAck"] == 1){
    $this->sendUdp($host, $port, $result["ackdata"]);
    if(isset ($result['data']['list']) && isset ($result['data']['totalCount'])){
   $list = $result['data']['list'];
   $count = $result['data']['totalCount'];
   while($count>  count($list)){
  @socket_recvfrom($socket,$result_temp,4096,0,$fromHost,$fromPort);
  $result_temp = phpext_unpack($result_temp);
  $this->sendUdp($host, $port, $result_temp["ackdata"]);
  $list = array_merge($list,$result_temp['data']['list']);
   }
   $result['data']['list'] = $list;
    }
}else{
    @socket_recvfrom($socket,$result,4096,0,$fromHost,$fromPort);
    $result = phpext_unpack($result);
    if($result["needAck"] == 1){
   $this->sendUdp($host, $port, $result["ackdata"]);
   if(isset ($result['data']['result']) && isset ($result['data']['userID'])){
  $list = $result['data']['list'];
  $count = $result['data']['totalCount'];
  while($count>  count($list)){
 @socket_recvfrom($socket,$result_temp,4096,0,$fromHost,$fromPort);
 $result_temp = phpext_unpack($result_temp);
 $this->sendUdp($host, $port, $result_temp["ackdata"]);
 $list = array_merge($list,$result_temp['data']['list']);
  }
  $result['data']['list'] = $list;
   }
    }
}
 }else{
$result = SEND_UDP_ERROR;
 }
  }
  @socket_close($socket);
   }
   return $result;
    }

想了解更多编程学习,敬请关注php培训栏目!

以上就是php socket如何设置超时的详细内容!

查看更多关于php socket如何设置超时的详细内容...

  阅读:40次