PHP Udp套接字关闭不释放系统资源

时间:2012-03-19 14:29:04

标签: php udp netstat

我在php脚本中使用以下代码来处理通过http的传入数据并将其转发到另一个模块并等待响应。然后关闭套接字。

$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_bind($sock,$host,$port) or die("<?xml version=\"1.0\"?>");
if (!socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, 1)) {  
echo socket_strerror(socket_last_error($sock));
exit;
}
$arrOpt = array('l_onoff' => 1, 'l_linger' => 1);
socket_set_block($sock);
socket_set_option($sock, SOL_SOCKET, SO_LINGER, $arrOpt);
$address = gethostbyname($host);

$msg = $url;
$len = strlen($msg);
socket_sendto($sock, $msg, $len, 0, $remotehost, $remoteport) ;
socket_recvfrom($sock, $buff, 1000, 0, $host, $newport);
socket_close($sock);

面临的问题是正确接收响应并且socket_close错误也返回成功(socket_last_error的输出)。但之后,如果我执行netstat,我会看到端口正在使用,并且进程(/ proc / pid / status的输出)处于睡眠状态。 这种行为本质上是随机的,我在Amazon EC2云上使用PHP版本5.3.8。

1 个答案:

答案 0 :(得分:0)

关于 TIME_WAIT ...释放套接字

在Linux中运行# /proc/sys/net/ipv4/tcp_fin_timeout以查找....(默认为60秒)

more about