Ejemplo n.º 1
0
 public function connectTo($host, $port, $blockConnect = false)
 {
     Debug::netEvent(get_class($this) . '::' . __METHOD__ . '(' . $host . ':' . $port . ') invoked.');
     $connSocket = stream_socket_client("tcp://{$host}:{$port}", $errno, $errstr, 30);
     //add err connect
     stream_set_blocking($connSocket, 0);
     if (!is_resource($connSocket)) {
         Debug::netErrorEvent(get_class($this) . ': can not add errorneus socket with address \'' . $host . ':' . $port . '\'.');
         return false;
     }
     $connId = daemon::getNextSocketId();
     //@todo 增加阻塞 connect , 这样可以返回 connId 的时候 socketSession 已经建立好
     if ($blockConnect) {
     }
     $ev = event_new();
     // why not use EV_PERSIST, is because first event is acceptEvent?
     if (!event_set($ev, $connSocket, EV_WRITE, array($this, 'onConnectedEvent'), array($connId))) {
         Debug::netErrorEvent(get_class($this) . '::' . __METHOD__ . ': can not set onAcceptEvent() on binded socket: ' . Debug::dump($connSocket));
         return false;
     }
     event_base_set($ev, daemon::$eventBase);
     event_add($ev, 1 * 1000 * 1000);
     $this->checkConnSocketPool[$connId] = $connSocket;
     $this->checkConnEvPool[$connId] = $ev;
     return $connId;
 }
Ejemplo n.º 2
0
 protected function bindSocket($addr, $port)
 {
     $bindSocket = stream_socket_server("tcp://{$addr}:{$port}", $errno, $errstr);
     stream_set_blocking($bindSocket, 0);
     if (!is_resource($bindSocket)) {
         Debug::netErrorEvent(get_class($this) . ': can not add error socket with address \'' . $addr . ':' . $port . '\'.');
         return false;
     }
     $socketId = daemon::getNextSocketId();
     $ev = event_new();
     // why not use EV_PERSIST, is because first event is acceptEvent?
     if (!event_set($ev, $bindSocket, EV_READ, array($this, 'onAcceptEvent'), array($socketId))) {
         Debug::netErrorEvent(get_class($this) . '::' . __METHOD__ . ': can not set onAcceptEvent() on binded socket: ' . Debug::dump($bindSocket));
         return false;
     }
     $this->bindSocketEvPool[$socketId] = $ev;
     $this->bindSocketPool[$socketId] = $bindSocket;
     event_base_set($ev, daemon::$eventBase);
     event_add($ev);
 }