/* After intiall error checks, bind and listen to the provided port * start some helper threads, then accept connections and place them in * the shared buffer for a helper thread to process. */ int main(int argc, char** argv) { int i, listenport, listenfd, connfd; unsigned clientlen; sockaddr_in clientaddr; pthread_t tid; if(argc < 2){ printf("usage: %s <port number to bind and listen>\n", argv[0]); exit(1); } Sem_init(&w, 0, 1); num_entries = 0; cache = NULL; listenport = atoi(argv[1]); sbuf_init(&sbuf, SBUFSIZE); listenfd = Open_listenfd(listenport); clientlen = sizeof(clientaddr); for(i = 0; i < NTHREADS; i++) /* prethreading, creating worker threads */ Pthread_create(&tid, NULL, thread, &clientaddr); while(1){ connfd = Accept(listenfd, (SA *) &clientaddr, &clientlen); sbuf_insert(&sbuf, connfd); // put in buffer } return 0; }
int main(int argc, char **argv) { int listenfd, connfd; char hostname[MAXLINE], port[MAXLINE]; socklen_t clientlen; struct sockaddr_storage clientaddr; pthread_t tid; if (argc != 2) { fprintf(stderr, "usage: %s <port>\n", argv[0]); exit(1); } listenfd = Open_listenfd(argv[1]); sbuf_init(&sbuf, bufferSize); //初始化结构 int i; for(i = 0; i < MAXThreads; ++i) Pthread_create(&tid,NULL,thread,NULL); while (1) { clientlen = sizeof(clientaddr); connfd = Accept(listenfd, (SA *)&clientaddr, &clientlen); Getnameinfo((SA *) &clientaddr, clientlen, hostname, MAXLINE, port, MAXLINE, 0); printf("Accepted connection from (%s, %s)\n", hostname, port); sbuf_insert(&sbuf, connfd); //生产者加入描述符 } sbuf_deinit(&sbuf); //释放buffer return 0; }
int main(int argc, char *argv[]) { int i, listenfd, connfd, port; struct sockaddr_in clientaddr; int clientlen = sizeof(clientaddr); pthread_t tid; if(argc != 2) { printf("usgage: %s <port>", argv[0]); exit(0); } sbuf_init(&sbuf, SBUFSIZE); port = atoi(argv[1]); listenfd = Open_listenfd(port); for (i =0 ; i< NTHREADS ; i++) Pthread_create(&tid, NULL, thread, NULL); while (1) { connfd = Accept(listenfd, (SA *)&clientaddr, &clientlen); sbuf_insert(&sbuf, connfd); } }
int main (int argc, char *argv[]) { int i, listenfd, connfd, port; socklen_t clientlen = sizeof (struct sockaddr_in); struct sockaddr_in clientaddr; pthread_t tid; if (argc != 2) { wp_critical ("usage: %s <port>\n", argv[0]); } port = atoi (argv[1]); sbuf_init (&sbuf, SBUFSIZE); listenfd = wp_open_listenfd (port); if (listenfd < 0) { wp_critical ("error"); } for (i = 0; i < NTHREADS; i++) { wp_pthread_create (&tid, NULL, thread, NULL); } while (1) { connfd = wp_accept (listenfd, (struct sockaddr *)&clientaddr, &clientlen); sbuf_insert (&sbuf, connfd); } }
int main(int argc, char **argv) { int i, listenfd, connfd, port; struct sockaddr_in clientaddr; socklen_t clientlen = sizeof(clientaddr); pthread_t tid; /* Check command line args */ if (argc != 2) { fprintf(stderr, "usage: %s <port>\n", argv[0]); exit(1); } port = atoi(argv[1]); sbuf_init(&sbuf, SBUF_SIZE); listenfd = Open_listenfd(port); for (int i = 0; i < THREAD_NUM; i++) { Pthread_create(&tid, NULL, thread_func, NULL); } while (1) { connfd = Accept(listenfd, (SA *)&clientaddr, &clientlen); sbuf_insert(&sbuf, connfd); } }
/** @brief Main method of server. * Opens listening ports and initiates synchronized buffer. * Creates a pool of worker threads that will act on descriptors * in the buffer. * Loops and adds new connection descriptors to buffer. * @param argc Number of command line arguments. * @param argv Command line arguments, contains port number. * @return EXIT CODE */ int main(int argc, char **argv) { int listen_fd, conn_fd, port, i; struct sockaddr_in client_addr; socklen_t client_len = sizeof(client_addr); pthread_t tid; if (argc != 2) { printf("Usage: %s <port>\n", argv[0]); return -1; } /* bind listen_fd to port */ port = atoi(argv[1]); listen_fd = Open_listenfd(port); /* Initialize shared buffer */ sbuf_init(&sbuf, SBUFSIZE); /* Pre-spawn all worker threads */ for (i = 0; i < NTHREADS; i++) { Pthread_create(&tid, NULL, conn_handler, NULL); } /* Accept new connections and add to shared buffer */ while (1) { conn_fd = accept(listen_fd, (SA *) &client_addr, &client_len); if (conn_fd < 0) continue; sbuf_insert(&sbuf, conn_fd); } return 0; }
int tasks(char* buf, int cfd) { if (strcmp(buf, "stop") == 0) { printf("lexus1 stop\n"); sbuf_insert(&sbuf, 2); }else if (strcmp(buf, "left") == 0) { printf("lexus2 left\n"); sbuf_insert(&sbuf, 5); }else if (strcmp(buf, "right") == 0) { printf("lexus3 right\n"); sbuf_insert(&sbuf, 6); }else if (strcmp(buf, "low") == 0) { printf("lexus4 slow\n"); sbuf_insert(&sbuf, 7); }else if (strcmp(buf, "normal") == 0) { printf("lexus normal\n"); sbuf_insert(&sbuf, 8); }else if (strcmp(buf, "high") == 0) { printf("lexus high\n"); sbuf_insert(&sbuf, 9); }else if (strcmp(buf, "end") == 0) { printf("lexusend end\n"); sbuf_insert(&sbuf, 0x10); return -1; } write(cfd, hstat.temprature, 2); return 0; }
void *producer(void *arg){ int randb; srand((unsigned)time(NULL)); while(1){ randb = rand(); sleep(rand()%2); printf("now produce want to produce %d \n",randb); //if(sbuf_insert(sbp, randb)){ // printf("report error condition of producer\n\n"); //}else{ sbuf_insert(randb); printf("producer produced %d\n\n",randb); //} } }
int main(int argc, char **argv) { int i, listenfd, connfd, port, clientlen=sizeof(struct sockaddr_in); struct sockaddr_in clientaddr; pthread_t tid; if (argc != 2) { fprintf(stderr, "usage: %s <port>\n", argv[0]); exit(0); } port = atoi(argv[1]); sbuf_init(&sbuf, SBUFSIZE); listenfd = Open_listenfd(port); for (i = 0; i < NTHREADS; i++) /* Create worker threads */ Pthread_create(&tid, NULL, thread, NULL); while (1) { connfd = Accept(listenfd, (SA *) &clientaddr, &clientlen); sbuf_insert(&sbuf, connfd); /* Insert connfd in buffer */ } }
int main (int argc, char *argv []) { int listen_fd, port; int client_fd; int i; pthread_t tid; socklen_t socket_length; struct sockaddr_in client_socket; pthread_mutex_init(&mutex_lock, NULL); init_cache(); if (argc != 2) { fprintf(stderr, "usage: %s <port>\n", argv[0]); exit(0); } port = atoi(argv[1]); socket_length = sizeof(client_socket); /* ignore SIGPIPE */ Signal(SIGPIPE, SIG_IGN); /* initialize worker thread, then initialize buffer * for producer-consumer model */ sbuf_init(&sbuf, SBUFSIZE); for (i = 0; i < NTHREADS; i++) Pthread_create(&tid, NULL, worker_thread, NULL); listen_fd = Open_listenfd(port); while (1) { client_fd = Accept(listen_fd, (SA*)&client_socket, &socket_length); sbuf_insert(&sbuf, client_fd); } pthread_mutex_destroy(&mutex_lock); clean_cache(); }