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

 1 //如果$waitAckSec=0,则返回成功发送的字节�?
 2     //如果$waitAckSec大于0,则返回发送后接收到得内容
 3     //任何情况下,失败都返回FALSE
 4     function sendUdp($host, $port, $buff,$waitAckSec=0) {
 5         $socket = ($result = @socket_create(AF_INET,SOCK_DGRAM,SOL_UDP));
 6         //发送超时1秒
 7         socket_set_option($socket,SOL_SOCKET,SO_RCVTIMEO,array("sec"=>3, "usec"=>0 ) );
 8         //接收超时6秒
 9         socket_set_option($socket,SOL_SOCKET,SO_SNDTIMEO,array("sec"=>6, "usec"=>0 ) );
10         if($socket){
11             $result = @socket_sendto($socket,$buff,strlen($buff),0,$host,$port);
12             if($waitAckSec>0){
13                 $result = FALSE;
14                 $read = array($socket);
15                 $write = NULL;
16                 $except = NULL;
17                 if(@socket_select($read,$write,$except,$waitAckSec)>0){
18                     $fromHost = "";
19                     $fromPort = 0;
20                     @socket_recvfrom($socket,$result,4096,0,$fromHost,$fromPort);
21                     $result = phpext_unpack($result);
22                     if($result["needAck"] == 1){
23                         $this->sendUdp($host, $port, $result["ackdata"]);
24                         if(isset ($result['data']['list']) && isset ($result['data']['totalCount'])){
25                             $list = $result['data']['list'];
26                             $count = $result['data']['totalCount'];
27                             while($count>  count($list)){
28                                 @socket_recvfrom($socket,$result_temp,4096,0,$fromHost,$fromPort);
29                                 $result_temp = phpext_unpack($result_temp);
30                                 $this->sendUdp($host, $port, $result_temp["ackdata"]);
31                                 $list = array_merge($list,$result_temp['data']['list']);
32                             }
33                             $result['data']['list'] = $list;
34                         }
35                     }else{
36                         @socket_recvfrom($socket,$result,4096,0,$fromHost,$fromPort);
37                         $result = phpext_unpack($result);
38                         if($result["needAck"] == 1){
39                             $this->sendUdp($host, $port, $result["ackdata"]);
40                             if(isset ($result['data']['result']) && isset ($result['data']['userID'])){
41                                 $list = $result['data']['list'];
42                                 $count = $result['data']['totalCount'];
43                                 while($count>  count($list)){
44                                     @socket_recvfrom($socket,$result_temp,4096,0,$fromHost,$fromPort);
45                                     $result_temp = phpext_unpack($result_temp);
46                                     $this->sendUdp($host, $port, $result_temp["ackdata"]);
47                                     $list = array_merge($list,$result_temp['data']['list']);
48                                 }
49                                 $result['data']['list'] = $list;
50                             }
51                         }
52                     }
53                 }else{
54                     $result = SEND_UDP_ERROR;
55                 }
56             }
57             @socket_close($socket);
58         }
59         return $result;
60     }

转载于:https://www.cnblogs.com/lsl8966/p/3508278.html

php socket 超时设置相关推荐

  1. python3 socket 超时设置

    针对链接(connect)时候的超时: # 法一: import socketsocket.setdefaulttimeout(5) sock = socket.socket(socket.AF_IN ...

  2. 远程主机关闭了一个现有连接python_python 远程主机强迫关闭了一个现有的连接 socket 超时设置 errno 10054 | 学步园...

    python socket.error: [Errno 10054] 远程主机强迫关闭了一个现有的连接.问题解决方案: 前几天使用python读取网页.因为对一个网站大量的使用urlopen操作,所以 ...

  3. python远程主机强迫关闭了_[转] python 远程主机强迫关闭了一个现有的连接 socket 超时设置 errno 10054...

    python socket.error: [Errno 10054] 远程主机强迫关闭了一个现有的连接.问题解决方案: 前几天使用python读取网页.因为对一个网站大量的使用urlopen操作,所以 ...

  4. socket 超时设置

    int nNetTimeout=1000;//1秒 //发送时限 setsockopt(socket,SOL_S0CKET, SO_SNDTIMEO, (char *)&nNetTimeout ...

  5. netty socket超时设置_彻底搞懂 netty 线程模型

    编者注:Netty是Java领域有名的开源网络库,特点是高性能和高扩展性,因此很多流行的框架都是基于它来构建的,比如我们熟知的Dubbo.Rocketmq.Hadoop等.本文就netty线程模型展开 ...

  6. netty socket超时设置_Netty 学习和进阶策略

    背景 Netty 框架的特点 Netty 的一个特点就是入门相对比较容易,但是真正掌握并精通是非常困难的,原因有如下几个: 涉及的知识面比较广:Netty 作为一个高性能的 NIO 通信框架,涉及到的 ...

  7. JDBC未设置socket超时导致应用程序的线程池阻塞

    应用阻塞,查看堆栈发现线程阻塞在线程池的同步方法上,而进入同步方法的线程在等待socket读. 推测为网络问题导致的连接阻塞,但应用未设置socket超时而一直等待.网上说JDBC通过socket实现 ...

  8. ZuulFilter和Fegin超时设置

    之前配置ZuulFilter和Fegin超时时用了相同的配置方法,之前请求时数据量较小,没有出现什么问题.可是今天用Sidecar调用了python的一个服务,这个服务比较耗时,问题就出现了,各种超时 ...

  9. Python 技术篇-全局与当前socket超时连接时间设置方法实例演示,查看socket超时连接时间

    socket.setdefaulttimeout() 方法用于设置全局socket超时连接时间. settimeout()方法用于设置全局socket超时连接时间. 代码演示: import sock ...

  10. Socket编程实践(9) --套接字IO超时设置方法

    引:超时设置3种方案 1. alarm超时设置方法 //代码实现: 这种方式较少用 void sigHandlerForSigAlrm(int signo) {return ; }signal(SIG ...

最新文章

  1. Java元数据区的概念_java之元数据(metadata)-Go语言中文社区
  2. 在三个Java IDE中生成的三种常见方法
  3. react把表格渲染好ui_react 入坑笔记(五) - 条件渲染和列表渲染
  4. 2019-12-17 drivers/clocksource/arm_arch_timer.c
  5. 【linux】web socket
  6. SpringCloud之Ribbon源码分析(一)
  7. 【OOP编程思想小感悟】
  8. 郑州大学“战疫杯”大学生程序设计在线邀请赛(6)(C++题解+详细思路)2022年5月14日
  9. USB无线网卡和PCI-E无线网卡如何选择?
  10. 机器学习第六课part1(最小二乘,L1,L2正则)
  11. C++——NOIP模拟题——葫芦
  12. libusb,libusbk,winusb的区别
  13. 电脑 及 电脑应用软件背景色、字体的设置(护眼色)
  14. 读曾仕强《管理的方与圆》笔记一
  15. MPP(高斯DB)常用语句(不定时更新添加)
  16. 删除数据库表中的重复记录
  17. ajax,HTTP原理 : 网络传输协议,网页从输入url到渲染的流程,函数防抖和节流
  18. 【转】花开正当时,十四款120/128GB SSD横向评测
  19. linux如何设置mac快捷键,Mac与Linux常用快捷键汇总
  20. echarts 饼图 逆时针降序排序

热门文章

  1. centos安装apache+mysql_CentOS7安装apache+mysql+php环境
  2. android progressdialog 倒计时,自定义progressdialog——带倒计时的progressbar效果
  3. 在Vue项目中添加vue router
  4. Kotlin 输出“Hello World”
  5. Flutter进阶第12篇: 检测应用版本号、服务器下载文件以及实现App自动升级、安装
  6. 如何使用手机端、ipad端来编写博客
  7. JSP解决 — 登录注册界面点击按钮无法获取值在界面显示
  8. 查看网络情况netstat指令与动态监控top指令
  9. Winform/WPF国际化处理
  10. 基于JAX-WS的Web Service服务端/客户端 ;JAX-WS + Spring 开发webservice