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; }
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); }