const char * pscom_con_info_str2(pscom_con_info_t *con_info1, pscom_con_info_t *con_info2) { static char buf[sizeof("(xxx.xxx.xxx.xxx,pidxxx,0x_xblast_xblast__,XXXXXXXXXXXXXXXX)_____ to " "(xxx.xxx.xxx.xxx,pidxxx,0x_xblast_xblast__,XXXXXXXXXXXXXXXX)_____")]; snprintf(buf, sizeof(buf), "("INET_ADDR_FORMAT",%d,%p,%.8s) to ("INET_ADDR_FORMAT",%d,%p,%.8s)", INET_ADDR_SPLIT(con_info1->node_id), con_info1->pid, con_info1->id, con_info1->name, INET_ADDR_SPLIT(con_info2->node_id), con_info2->pid, con_info2->id, con_info2->name); return buf; }
const char * pscom_inetstr(int addr) { static char ret[sizeof("xxx.xxx.xxx.xxx_____")]; snprintf(ret, sizeof(ret), INET_ADDR_FORMAT, INET_ADDR_SPLIT(addr)); return ret; }
const char *pscom_socket_ondemand_str(int nodeid, int portno, const char name[8]) { static char socket_str[sizeof("xxx.xxx.xxx.xxx:xxxxx@01234567____")]; if (portno < 0 || portno > 65535) goto err_invalid_port; if (!name[0]) { snprintf(socket_str, sizeof(socket_str), INET_ADDR_FORMAT ":%u", INET_ADDR_SPLIT(nodeid), portno); } else { snprintf(socket_str, sizeof(socket_str), INET_ADDR_FORMAT ":%u@%1.8s", INET_ADDR_SPLIT(nodeid), portno, name); } return socket_str; /* error code */ err_invalid_port: errno = EINVAL; return NULL; }
static FILE *get_peer(void) { int fd; struct addrinfo hints = { .ai_flags = AI_CANONNAME, //.ai_family = AF_UNSPEC, .ai_family = AF_INET, .ai_socktype = SOCK_STREAM }; struct addrinfo *addrinfo; int n; n = getaddrinfo(arg_servername ? arg_servername : "0", arg_port, &hints, &addrinfo); if (n) { addrinfo = NULL; printf("getaddrinfo() failed: %s\n", gai_strerror(n)); exit(1); } if (is_server) { int val = 1; int listen_fd; SCALL(listen_fd = socket(PF_INET, SOCK_STREAM, 0)); setsockopt(listen_fd, SOL_SOCKET, SO_REUSEADDR, (void*) &val, sizeof(val)); SCALL(bind(listen_fd, addrinfo->ai_addr, addrinfo->ai_addrlen)); SCALL(listen(listen_fd, 1)); printf("Waiting for connection\n"); fd = accept(listen_fd, NULL, 0); } else { struct sockaddr_in *si = (struct sockaddr_in *)addrinfo->ai_addr; assert(si->sin_family == AF_INET); SCALL(fd = socket(PF_INET, SOCK_STREAM, 0)); printf("Connect to "INET_ADDR_FORMAT" \n", INET_ADDR_SPLIT(ntohl(si->sin_addr.s_addr))); SCALL(connect(fd, addrinfo->ai_addr, addrinfo->ai_addrlen)); } if (addrinfo) freeaddrinfo(addrinfo); return fdopen(fd, "a+"); }