int main(int argc, char **argv) { FILE *peer; parse_opt(argc, argv); is_client = !!arg_servername; peer = get_peer(!is_client); pscom_openib_init(peer); if (!is_client) { // server printf("Server\n"); if (!arg_nokill) { // Kill the server with SIGSTOP if the peer disappear. int fd = fileno(peer); SCALL(fcntl(fd, F_SETOWN, getpid())); SCALL(fcntl(fd, F_SETSIG, SIGINT)); SCALL(fcntl(fd, F_SETFL, O_ASYNC)); } run_pp_server(); } else { printf("Client\n"); do_pp_client(); } return 0; }
int main(int argc, char **argv) { FILE *peer; parse_opt(argc, argv); peer = get_peer(); init(peer); if (is_server) { // server if (!arg_nokill) { // Kill the server with SIGSTOP if the peer disappear. int fd = fileno(peer); SCALL(fcntl(fd, F_SETOWN, getpid())); SCALL(fcntl(fd, F_SETSIG, SIGINT)); SCALL(fcntl(fd, F_SETFL, O_ASYNC)); } run_pp_server(); } else { sleep(2); do_pp_client(); } return 0; }
void WrapperObject::BuildMetaObject () { QString path = QFileInfo (Path_).absolutePath (); QDir scriptDir (path); QMetaObjectBuilder builder; builder.setSuperClass (QObject::metaObject ()); builder.setClassName (QString ("LeechCraft::Plugins::Qross::%1::%2") .arg (Type_) .arg (SCALL (QString) ("GetName").remove (' ')).toLatin1 ()); int currentMetaMethod = 0; if (scriptDir.exists ("ExportedSlots")) { QFile slotsFile (scriptDir.filePath ("ExportedSlots")); slotsFile.open (QIODevice::ReadOnly); QList<QByteArray> sigSlots = slotsFile.readAll ().split ('\n'); Q_FOREACH (QByteArray signature, sigSlots) { signature = signature.trimmed (); if (signature.isEmpty ()) continue; Index2ExportedSignatures_ [currentMetaMethod++] = signature; builder.addSlot (signature); }
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+"); }
FILE *get_peer(int passive) { int fd; struct addrinfo hints = { .ai_flags = AI_CANONNAME, .ai_family = AF_UNSPEC, .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 (passive) { 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 { SCALL(fd = socket(PF_INET, SOCK_STREAM, 0)); SCALL(connect(fd, addrinfo->ai_addr, addrinfo->ai_addrlen)); } if (addrinfo) freeaddrinfo(addrinfo); return fdopen(fd, "a+"); }