站长资讯网
最全最丰富的资讯网站

php socket如何设置超时

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

php socket如何设置超时

【相关学习推荐: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;     }

想了解

赞(0)
分享到: 更多 (0)
网站地图   沪ICP备18035694号-2    沪公网安备31011702889846号