示例#1
0
文件: proxy.c 项目: jdbrandon/proxy
/* 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;
}
示例#2
0
文件: tiny.c 项目: akxxsb/tiny
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;
}
示例#3
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);
	}
}
示例#4
0
文件: prethread.c 项目: 4179e1/misc
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);
	}
}
示例#5
0
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);
    }
}
示例#6
0
/** @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;
}
示例#7
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;
}
示例#8
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);
		//}
	}
}
示例#9
0
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 */
    }
}
示例#10
0
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();
}