From 4c9660d5a3e82b7cfdbc03347ad3f1e423ae5686 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Wed, 19 Aug 2009 20:38:18 +0000 Subject: [PATCH] Handling of socket errors added --- inc/classes/main/console/class_ConsoleTools.php | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/inc/classes/main/console/class_ConsoleTools.php b/inc/classes/main/console/class_ConsoleTools.php index cce0765d..1599cdc8 100644 --- a/inc/classes/main/console/class_ConsoleTools.php +++ b/inc/classes/main/console/class_ConsoleTools.php @@ -130,7 +130,8 @@ class ConsoleTools extends BaseFrameworkSystem { * Determines own remote IP address (e.g. can be used to probe if we are * reachable from outside by determining external IP and then connect to it. * This is accomblished by connecting to the IP of www.ship-simu.org which - * should default to 217.172.186.31. + * should default to 217.172.186.31. Of course, this method requires a valid + * and working Internet connection to work properly. * * This method is taken and lightly rewritten from a user comment on php.net: * http://de.php.net/manual/en/function.socket-create.php#49368 @@ -138,16 +139,27 @@ class ConsoleTools extends BaseFrameworkSystem { * @param $dest IP destination we should connect to * @param $port Port destination we should connect to * @return $externalAddress The determined external IP address - * @throws InvalidSocketException If socket initialization wents wrong + * @throws InvalidSocketException If socket initialization wents wrong or if an errors occurs */ public function determineExternalIp ($dest = '217.172.186.31', $port = 80) { // First get a socket $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); + + // Is it valid? if (!is_resource($socket)) { // Throw InvalidSocketException throw new InvalidSocketException (array($this, gettype($socket), 0, 'unknown')); } // END - if + // Get socket error code for verification + $socketError = socket_last_error($socket); + + // Check if there was an error else + if ($socketError > 0) { + // Then throw again + throw new InvalidSocketException(array($this, gettype($socket), $socketError, socket_strerror($socketError)), BaseListener::EXCEPTION_INVALID_SOCKET); + } // END - if + // Connect to the destination socket_connect($socket, $dest, $port); -- 2.39.5