int main(int argc, char *argv[]) { int listenfd, connectfd; struct sockaddr_in host_addr, pin_addr; int pin_addr_size; pthread_t multiCS; ADDR_ARG *arg = NULL; createSocket(&listenfd, 0); initHostAddr(&host_addr, myport); printf(" init ipaddress: %s\n", inet_ntoa(host_addr.sin_addr)); bindPort(&listenfd, &host_addr); listenPort(&listenfd); pin_addr_size = sizeof(pin_addr); while (1) { getAccept(&listenfd, &connectfd, &pin_addr, &pin_addr_size); arg = (ADDR_ARG *)malloc(sizeof(ADDR_ARG)); arg->connectfd = connectfd; memcpy((void *)&arg->cli_addr, &pin_addr, sizeof(pin_addr)); createPthread(&multiCS, start_talk, arg); } close(listenfd); return 0; }
// one job message per time // close on recv static void *jobReceiver_func(void *args) { DEBUG_PRINT("Job Receiver running\n"); // listen int servfd = listenPort(RENDERING_UNIT_PORT); char msgBuf[128]; while(gl_cfg.flag != STATUS_EXIT) { // wait for connection // TODO: blocking wait, seems rendering unit only receive one task message // so we can just exit this thread after receive it int clientfd = accept(servfd, NULL, NULL); if(clientfd < 0) { // do nothing currently perror("Failed to accept connection"); continue; } ////////////////////////////// // send header message // TODO: don't check result ////////////////////////////// sprintf(msgBuf, "%s%s", PRO_HEADER_MESSAGE, PRO_MESSAGE_TAIL); sendMessage(clientfd, msgBuf, strlen(msgBuf)); // recv message char *jobMsg = recvMessageWithTail(clientfd, PRO_MESSAGE_TAIL); if(NULL != jobMsg) { printf("Recv Message : %s\n", jobMsg); // parse message parseJobMessage(jobMsg); // free message free(jobMsg); } ////////////////////////////// // send tail message // TODO: don't check result ////////////////////////////// sprintf(msgBuf, "%s%s", PRO_TAIL_MESSAGE, PRO_MESSAGE_TAIL); sendMessage(clientfd, msgBuf, strlen(msgBuf)); close(clientfd); } // this line will never be executed close(servfd); DEBUG_PRINT("Job Receiver ended\n"); }
std::string RhrController::getConfigString() const { std::stringstream config; if (connectionMethod() == RhrController::Connect) { auto host = listenHost(); unsigned short port = listenPort(); config << "connect " << host << " " << port; } else if (connectionMethod() == RhrController::Listen) { auto host = connectHost(); unsigned short port = connectPort(); if (port > 0) { config << "listen " << host << " " << port; } else { int id = m_module->id(); config << "listen " << "_" << " " << ":" << id; } } return config.str(); }
int main(int argc, char *argv[], char **envp) { if(argc != 3) { printf("Not enough arguments."); return -1; } // create a folder for server contents strcat(server_directory, argv[1]); strcat(server_directory, "/"); if(!opendir(server_directory)) { mkdir(server_directory, 0770); } server_port = atoi(argv[2]); parse("server/dfs.conf"); //grab what we need for the server listenPort(server_port); //start up the server return 1; }