terom@9: #include terom@9: #include terom@9: #include terom@9: #include terom@9: #include terom@9: terom@9: #include "common.h" terom@23: #include "render_net.h" terom@9: #include "remote_node.h" terom@9: terom@9: int remote_node_init (struct remote_node *node_info, const char *hostname, const char *portname) { terom@9: // zero out the struct terom@9: memset(node_info, 0, sizeof(*node_info)); terom@9: terom@9: // XXX: currently, this is hardcoded to one, but should be automagically discovered terom@9: node_info->parallel_renders = 1; terom@9: terom@9: // lookup the host:port terom@9: portname = portname ? portname : RENDER_PORT_NAME; terom@9: terom@9: // XXX: stat it and look for a PF_UNIX socket! terom@9: terom@9: // PF_INET terom@9: terom@9: struct addrinfo hints, *results, *result; terom@9: terom@9: memset(&hints, 0, sizeof(hints)); terom@9: hints.ai_socktype = SOCK_STREAM; terom@9: hints.ai_flags = AI_ADDRCONFIG; // attempt to get a working address as the first result terom@9: terom@9: int err = getaddrinfo(hostname, portname, &hints, &results); terom@9: terom@9: if (err != 0) { terom@9: error("getaddrinfo: [%s].%s: %s", hostname, portname, gai_strerror(err)); terom@9: terom@9: return -1; terom@9: } terom@9: terom@9: assert(results != NULL); // we expect at least one result terom@9: terom@9: // XXX: only use the first result, discard the rest. terom@9: result = results; terom@9: memcpy(&node_info->addr, result->ai_addr, result->ai_addrlen); terom@9: terom@9: freeaddrinfo(results); terom@9: terom@9: // success! terom@9: node_info->valid = 1; terom@9: return 0; terom@9: } terom@9: