socket = $socket; } public function __destruct() { if ($this->socket) { @socket_close($this->socket); } } /** * * * @param Request $request The request to send * @return Response[] The received responses if any */ public function send(Request $request, $wait_time=5) { // Get the details from the request $buffer = $request->getBuffer(); $addr = $request->getAddress(); $port = $request->getPort(); if (false === socket_sendto($this->socket, $buffer, strlen($buffer), 0, $addr, $port)) { $errno = socket_last_error(); $errmsg = socket_error($errno); throw new EndpointException("Send failed: {$errmsg} ({$errno})"); } // Wait $wait_time seconds for responses to arrive $read_expires = microtime(true) + $wait_time; $responses = []; while (microtime(true) < $read_expires) { if (socket_recvfrom($this->socket, $data, 5120, MSG_DONTWAIT, $raddr, $rport)) { //while(is_string($data = socket_read($this->socket, 5120))) { $response = Response::createFromString($data, $raddr); if ($response) { $responses[] = $response; } } usleep(10000); } return $responses; /* while(socket_select($read, $write, $except, 3)) { //Read received packets with a maximum size of 5120 bytes. while(is_string($data = socket_read($this->socket, 5120))) { echo "READ: {$data}\n"; return $data; } } */ } }