* This exception is thrown when the socket resource is invalid or an error
* occurs while socket initialization phase.
*
- * @author Roland Haeder <webmaster@ship-simu.org>
+ * @author Roland Haeder <webmaster@shipsimu.org>
* @version 0.0.0
- * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 Core Developer Team
+ * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Core Developer Team
* @license GNU GPL 3.0 or any newer version
- * @link http://www.ship-simu.org
+ * @link http://www.shipsimu.org
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-class InvalidSocketException extends FrameworkException {
+class InvalidSocketException extends AbstractSocketException {
/**
* A Constructor for this exception
*
- * @param $messageArray Error message array
- * @param $code Error code
+ * @param $messageArray Error message array
+ * @param $code Error code
* @return void
*/
- public function __construct(array $messageData, $code) {
- // Construct the message
- $message = sprintf("[%s:] Invalid socket (type %s != resource). errno=%s, errstr=%s",
- $messageData[0]->__toString(),
- $messageData[1],
- $messageData[2],
- $messageData[3]
- );
+ public function __construct (array $messageData, $code) {
+ // Is it a resource?
+ if (is_resource($messageData[1])) {
+ // Get last error
+ $lastError = socket_last_error($messageData[1]);
+
+ // Construct the message
+ $message = sprintf('[%s:] Invalid socket, type=%s, errno=%s, errstr=%s',
+ $messageData[0]->__toString(),
+ gettype($messageData[1]),
+ $lastError,
+ socket_strerror($lastError)
+ );
+ } else {
+ // Construct the message
+ $message = sprintf('[%s:] Invalid socket, type=%s(%s), errno=%s, errstr=%s',
+ $messageData[0]->__toString(),
+ $messageData[1],
+ gettype($messageData[1]),
+ $messageData[2],
+ $messageData[3]
+ );
+ }
// Call parent exception constructor
parent::__construct($message, $code);