php socket 超时设置
1、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 socket 超时设置的更多相关文章
- C++ Socket超时设置
用winsocket时,send(),recv()过程中有时由于网络状况等原因,收发不能预期进行,可以设置收发时限:int nNetTimeout = 1000; //1秒//发送时限setsocko ...
- python socket 超时设置 errno10054
python socket.error: [Errno 10054] 远程主机强迫关闭了一个现有的连接.问题解决方案: 前几天使用python读取网页.因为对一个网站大量的使用urlopen操作,所以 ...
- [转] python 远程主机强迫关闭了一个现有的连接 socket 超时设置 errno 10054
python socket.error: [Errno 10054] 远程主机强迫关闭了一个现有的连接.问题解决方案: 前几天使用python读取网页.因为对一个网站大量的使用urlopen操作,所以 ...
- C# Socket连接超时设置
问题描述: 对于C# Socket没有超时设置的选项,默认情况下进行Socket连接,返回连接失败需要20-30s时间,严重影响用户体验 问题解决: Socket服务器端: Socke ...
- Socket编程实践(9) --套接字IO超时设置方法
引:超时设置3种方案 1. alarm超时设置方法 //代码实现: 这种方式较少用 void sigHandlerForSigAlrm(int signo) { return ; } signal(S ...
- connect socket的超时设置
最近项目中,有个需求是检测某ip地址是否是通的,使用了socket的connect函数.但是,当ip地址写错的话,connect就会一直阻塞在那里,大概2.3分钟才能返回连接失败.这对于用户来说是不可 ...
- PHP socket 编程中的超时设置
PHP socket 编程中的超时设置.网上找了半天也没找到.贴出来分享之:设置$socket 发送超时1秒,接收超时3秒: $socket = socket_create(AF_INET,SOCK_ ...
- JAVA Socket超时浅析
JAVA Socket超时浅析 套接字或插座(socket)是一种软件形式的抽象,用于表达两台机器间一个连接的"终端".针对一个特定的连接,每台机器上都有一个"套接字&q ...
- 使用select io复用实现超时设置
在linux的socket编程中,经常会遇到超时设置的问题,例如请求方如果在Ks内不发送数据则服务器要断开连接停止服务.这里我使用select的io复用实现超时5s设置,具体代码片段如下: fd_se ...
随机推荐
- OpenGL绘制简单的时钟(首发测试)
#include <windows.h> #include <GL/glut.h>//本来OpenGL程序一般还要包含<GL/gl.h>和<GL/glu.h& ...
- 【iOS技术】Xcode+GitHub远程代码托管(GIT, SVN)
原创 2016-05-24 旭哥 蓝鸥 学生对旭哥的评价是这样的: 旭哥 为什么这么年轻 知识却比我们多这么多............ 旭哥很是负责,对同学的各种问题都能够热心地解答,在旭哥的带领下, ...
- Linux学习之awk命令
一. AWK 说明 awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入.一个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能 ...
- nginx代理配置
server { listen 80; server_name api.colortrip.cn; client_max_body_size 10m; a ...
- 【翻译】MVC Music Store 教程-概述(三)
Controller 与传统的Web框架,将传入的URL通常映射到磁盘上的文件.例如:一个URL请求“/Products.aspx" 或"/Products.php”是处理一个Pr ...
- dijkstra 优先队列最短路模板
;;*maxn];,):id(a),dist(b){} )); ;i<=n;i++)dist[i]=inf; dist[st]=; ;i= ...
- linux创建文件树,孩子兄弟树(或广义表),创建文件树及其訪问
假设在Linux下要訪问一个目录. 我们须要知道一下系统调用. 1.opendir(path); //注意path是绝对路径 2.ptr=readdir(dir);//dir 为opendir();正 ...
- css组件规范
7月份研究了下 写了下总结. 笔记地址
- vtp——vlan trunk protcal
server模式——服务器模式,在该模式下可以建立vlan,删除vlan,该模式下的vlan可以下发到其他的交换机 client模式——客户端模式,被动模式.交换机可以接受从server模式下传来的v ...
- Xposed出现 java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation
Xposed出现 java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implem ...