return;
}
- struct addrinfo* result = NULL;
- int err = getaddrinfo(host, NULL, NULL /* no hints */, &result);
+ struct addrinfo hints;
+ memset(&hints, 0, sizeof(struct addrinfo));
+ hints.ai_family = AF_INET;
+
+ struct addrinfo* result0 = NULL;
+ int err = getaddrinfo(host, NULL, &hints, &result0);
if (err) {
SG_LOG(SG_IO, SG_WARN, "getaddrinfo failed for '" << host << "' : " << gai_strerror(err));
- } else if (result->ai_addrlen != getAddrLen()) {
- SG_LOG(SG_IO, SG_ALERT, "mismatch in socket address sizes");
} else {
- memcpy(addr, result->ai_addr, result->ai_addrlen);
- }
-
- freeaddrinfo(result);
+ struct addrinfo* result;
+ for (result = result0; result != NULL; result = result->ai_next) {
+ if (result->ai_family != AF_INET) { // only accept IP4 for the moment
+ continue;
+ }
+
+ if (result->ai_addrlen != getAddrLen()) {
+ SG_LOG(SG_IO, SG_ALERT, "mismatch in socket address sizes: got " <<
+ result->ai_addrlen << ", expected " << getAddrLen());
+ continue;
+ }
+
+ memcpy(addr, result->ai_addr, result->ai_addrlen);
+ break;
+ } // of getaddrinfo results iteration
+ } // of getaddrinfo succeeded
+
+ freeaddrinfo(result0);
addr->sin_port = htons (port); // fix up port after getaddrinfo
}
#include <simgear/math/SGMath.hxx>
#include <simgear/misc/sg_path.hxx>
#include <simgear/xml/easyxml.hxx>
+#include <simgear/misc/ResourceManager.hxx>
#include "props.hxx"
#include "props_io.hxx"
// Check for an include.
attval = atts.getValue("include");
if (attval != 0) {
- SGPath path(SGPath(_base).dir());
- path.append(attval);
try {
- readProperties(path.str(), _root, 0, _extended);
+ SGPath path = simgear::ResourceManager::instance()->findPath(attval, SGPath(_base).dir());
+ if (path.isNull())
+ {
+ throw sg_io_exception("Cannot open file", sg_location(attval));
+ }
+ readProperties(path.str(), _root, 0, _extended);
} catch (sg_io_exception &e) {
- setException(e);
+ setException(e);
}
}
bool omit = false;
attval = atts.getValue("include");
if (attval != 0) {
- SGPath path(SGPath(_base).dir());
- path.append(attval);
try {
- readProperties(path.str(), node, 0, _extended);
+ SGPath path = simgear::ResourceManager::instance()->findPath(attval, SGPath(_base).dir());
+ if (path.isNull())
+ {
+ throw sg_io_exception("Cannot open file", sg_location(attval));
+ }
+ readProperties(path.str(), node, 0, _extended);
} catch (sg_io_exception &e) {
- setException(e);
+ setException(e);
}
attval = atts.getValue("omit-node");
* @param _loop Define whether this sound should be played in a loop.
*/
void play( bool loop = false ) {
- _playing = true; _loop = loop; _changed = true;
+ _playing = true; _loop = loop; _changed = true; _static_changed = true;
}
/**