int main(void) { int sk, fd, len; struct sockaddr_in cli_addr; len = sizeof(cli_addr); sk = server_init(); if (sk < 0) { ERROR("server_init error"); return -1; } while (1) { fd = accept(sk, (struct sockaddr *)&cli_addr, &len); if (fd < 0) { ERROR("accept faild"); continue; } DEBUG("get a call on (%s:%d)", inet_ntoa(cli_addr.sin_addr.s_addr), \ ntohs(cli_addr.sin_port)); process_rq(fd); close(fd); } }
main(int ac, char *av[]) { int sock, fd; FILE *fpin; char request[BUFSIZ]; if ( ac == 1 ) { fprintf(stderr,"usage: ws portnum\n"); exit(1); } sock = make_server_socket( atoi(av[1]) ); if ( sock == -1 ) exit(2); /* main loop here */ while(1) { /* take a call and buffer it */ fd = accept( sock, NULL, NULL ); fpin = fdopen(fd, "r" ); /* read request */ fgets(request,BUFSIZ,fpin); printf("got a call: request = %s", request); read_til_crnl(fpin); /* do what client asks */ process_rq(request, fd); fclose(fpin); } }
main(int ac, char *av[]) { int sock, fd; FILE *fpin; char request[BUFSIZ]; if ( ac == 1 ){ fprintf(stderr,"usage: ws portnum\n"); exit(1); } sock = make_server_socket( atoi(av[1]) ); if ( sock == -1 ) exit(2); while(1){ fd = accept( sock, NULL, NULL ); fpin = fdopen(fd, "r" ); fgets(request,BUFSIZ,fpin); printf("got a call: request = %s", request); read_til_crnl(fpin); process_rq(request, fd); fclose(fpin); } }
int main(int argc, char *argv[]) { if (argc != 2) { fprintf(stderr, "usage: ./webserv portnum\n"); exit(EXIT_FAILURE); } int sock_id = make_server_socket(atoi(argv[1])); int sock_fd; char request[BUFSIZ]; FILE *sock_fp; while (true) { // 循环中自然可以多次接收命令 sock_fd = accept(sock_id, NULL, NULL); sock_fp = fdopen(sock_fd, "r"); fgets(request, BUFSIZ, sock_fp); printf("got a call: request = %s\n", request); // sock_fp 和 sock_fd 的位置就是同一个,所以必须处理掉 sock_fp 的输出 char buf[BUFSIZ]; while (fgets(buf, BUFSIZ, sock_fp) != NULL && strcmp(buf, "\r\n") != 0) ; process_rq(request, sock_fd); fclose(sock_fp); } return EXIT_SUCCESS; }
void *handle_call(void *fdptr) { FILE *fpin; char request[BUFSIZ]; int fd ; fd = *(int *)fdptr; free(fdptr); /* get fd from arg */ fpin = fdopen(fd, "r"); /* buffer input */ fgets(request,BUFSIZ,fpin); /* read client request */ printf("got a call on %d: request = %s", fd, request); skip_rest_of_header(fpin); process_rq(request, fd); /* process client rq */ fclose(fpin); }