* 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
* @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);