Files
wy/ZeedFramework/library/Zeed/Task/Locker.php
2026-01-07 11:40:41 +08:00

65 lines
1.4 KiB
PHP

<?php
/**
* Playcool Project
*
* LICENSE
*
* http://www.playcool.com/license/ice
*
* @category ICE
* @package ChangeMe
* @subpackage ChangeMe
* @copyright Copyright (c) 2008 Zeed Technologies PRC Inc. (http://www.inews.com.cn)
* @author xSharp ( GTalk: xSharp@gmail.com )
* @since 2009-11-19
* @version SVN: $Id$
*/
/**
* @author iNewS6
*/
class Zeed_Task_Locker
{
private $_sock;
/**
* Lock a port from port list
*
* @param String|Integer $ports
* @return Mixed Locked port,FALSE if locked none
*/
public function lock($ports, $address = '127.0.0.1')
{
$ports = explode(",", $ports);
$port = 0;
if (($this->_sock = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
return false;
}
foreach ($ports as $p) {
if (@socket_bind($this->_sock, $address, (int) $p) === false) {
continue;
} else {
$port = $p;
break;
}
}
if ($port == 0)
return false;
if (@socket_listen($this->_sock, 5) === false) {
return false;
}
return $port;
}
/**
* Release locker
*/
public function unlock()
{
if ($this->_sock !== false)
@socket_close($this->_sock);
}
}
// End ^ LF ^ UTF-8