【问题标题】:How to tell if socket is open in PHP?如何判断套接字是否在 PHP 中打开?
【发布时间】:2012-05-22 08:20:36
【问题描述】:

我需要维护一些我用 PHP 打开的套接字并定期检查这些套接字。我是 PHP 中的套接字新手;我这样打开套接字:

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
socket_connect($socket, $ip, $port);

某些套接字可能会进入不返回消息的状态;这些套接字只接收消息。 如果套接字没有响应消息,如何判断套接字是否打开?

【问题讨论】:

  • 您应该区分“打开”的套接字,例如操作系统为这些描述符和“连接”到另一个套接字(例如远程主机上的服务器套接字)的套接字分配资源。在这种情况下,我认为问题应该是关于“......如果打开套接字连接......”。

标签: php sockets


【解决方案1】:

socket_sendto — 向套接字发送消息,无论它是否已连接

似乎您可以使用socket_sendto 并向远程主机发送一些“ping”数据,然后测试返回值以确定套接字是否仍然建立。

【讨论】:

  • 你能弄明白吗?
  • 非阻塞尝试从套接字读取怎么样?这应该返回空白或 false,具体取决于它是否已连接。我认为还会生成一个警告,但可以禁用。
【解决方案2】:

最好使用函数:fsockopen()

阅读:http://www.php.net/manual/en/function.fsockopen.php

或者你可以尝试使用函数:socket_create_listen()

阅读:http://www.php.net/manual/en/function.socket-create-listen.php

(这个只是实验性的。)

要定期检查,您可以使用简单的 cron 来完成。

【讨论】:

    猜你喜欢
    • 2013-12-31
    • 2012-10-07
    • 1970-01-01
    • 2019-01-27
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多