首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php socket_accept已停止

php socket_accept已停止
EN

Stack Overflow用户
提问于 2011-09-13 00:06:26
回答 1查看 747关注 0票数 2

你好,我做了一个php socket服务器从plc获取数据,plc被配置为tcp socket客户端。我有一个严重的问题,如果局域网关闭似乎是socket_accept功能停滞,plc不能发送数据给我。如果我重新启动我的服务器,plc重新连接正确。

有人能帮帮我吗?我的服务器代码:

代码语言:javascript
复制
error_reporting(E_ALL);

/* Allow the script to hang around waiting for connections. */
set_time_limit(0);

/* Turn on implicit output flushing so we see what we're getting
 * as it comes in. */
ob_implicit_flush();

$address = ipserver;
$port = 10001;    

if (($sock = socket_create(AF_INET, SOCK_STREAM, getprotobyname("TCP"))) === false) {
    echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
    exit;
}

if (!socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, 1)) {
    echo socket_strerror(socket_last_error($sock));
    exit;
} 

if (socket_bind($sock, $address, $port) === false) {
    echo "socket_bind() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
    exit;
}

if (socket_listen($sock, 5) === false) {
    echo "socket_listen() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
    exit;
}

     while(true)
{
    //$remote_fd = socket_accept($sock);
    if (($remote_fd = socket_accept($sock)) === false) {
        echo "socket_accept() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
        break ;
    }
    do {
        $recv = "";
        if (false === ($recv = socket_read($remote_fd, 128, PHP_BINARY_READ))) {
            echo "socket_read() failed: reason: " . socket_strerror(socket_last_error($remote_fd)) . "\n";
            #break 2;
        }
        if($recv != "") {
            echo $recv."\n";
            inserisci_letture("t_letture",trim($recv));
            if($sent=socket_write($remote_fd,"1",1)===false)
            {
                echo "socket_write() failed: reason: " . socket_strerror(socket_last_error($remote_fd)) . "\n";
            }
        }
    } 
    while($recv != ""); 
}
socket_shutdown($sock);
socket_close($sock);


?>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-13 03:42:42

0.0.0.0上侦听,而不是在特定接口上侦听,以便在网络(接口)关闭时套接字不会关闭。这是在所有接口上侦听的特殊地址。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7390772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档