zoukankan      html  css  js  c++  java
  • [PHP]socket的连接超时 与 读取/写入超时

    socket处理时有两种超时 , 分为连接超时 和 读取/写入数据超时

    1. stream_socket_client 函数中的超时时间是连接超时 , 默认是php.ini中的default_socket_timeout配置项

    2. stream_set_timeout() 函数设置的是 读取/写入数据超时

    3. default_socket_timeout配置项也控制file_get_contents的超时时间

    PHP文档中对该函数的解释:

    stream_socket_client ($remote_socket [,&$errno [,&$errstr [,$timeout = ini_get("default_socket_timeout") [,$flags = STREAM_CLIENT_CONNECT [ $context ]]]]] )


    1.remote_socket 要连接到的套接字的地址。
      对于Internet域套接字(AF_INET)(如TCP和UDP),remote_socket参数的目标部分应包含主机名或IP地址,后跟冒号和端口号。对于Unix域套接字,目标部分应指向文件系统上的套接字文件。


    注意:默认情况下,流将以阻塞模式打开。您可以使用stream_set_blocking($stream,1)将其切换到非阻塞模式。如果 mode 为0,资源流将会被转换为非阻塞模式;如果是1,资源流将会被转换为阻塞模式。 该参数的设置将会影响到像 fgets() 和 fread() 这样的函数从资源流里读取数据。 在非阻塞模式下,调用 fgets() 总是会立即返回;而在阻塞模式下,将会一直等到从资源流里面获取到数据才能返回。

    2.errno 如果连接失败,将设置为系统级错误号。
    3.errstr 如果连接失败,将设置为系统级错误消息。
    4.timeout connect()系统调用应该超时之前的秒数。 默认是php.ini中的default_socket_timeout配置项

    注意:此参数仅在不进行异步连接尝试时适用。
    注意: 要设置通过套接字读取/写入数据的超时,请使用stream_set_timeout(),因为仅在连接套接字时才应用超时。

    5.flags 位掩码字段,可以设置为连接标志的任意组合。目前,连接标志的选择仅限于STREAM_CLIENT_CONNECT(默认值),STREAM_CLIENT_ASYNC_CONNECT和STREAM_CLIENT_PERSISTENT。 
    6.context 使用stream_context_create()创建的有效上下文资源。

  • 相关阅读:
    python笔记---@classmethod @staticmethod
    python笔记--socket编程
    python笔记--异常处理
    WebStorm 配置
    ECS node 环境搭建
    spm + host
    Untuntu的apt 终端命令
    Ubuntu 添加至启动栏
    Ubuntu设置镜像源
    Ubuntu 设置中文语言环境
  • 原文地址:https://www.cnblogs.com/taoshihan/p/10797204.html
Copyright © 2011-2022 走看看