1 int 2 main(int argc, char *argv[]) { 3 int o; 4 int sock; 5 while ((o = getopt(argc, argv, "dstS")) != -1) { 6 switch (o) { 7 case 'S': 8 do_sleep = 1; 9 break; 10 case 'd': 11 do_debug = 1; 12 break; 13 case 's': 14 do_stdin = 1; 15 break; 16 case 't': 17 do_thread = 1; 18 break; 19 } 20 } 21 22 if (do_stdin) { 23 struct sockets s; 24 s.local = 1; 25 s.in = stdin; 26 s.out = stdout; 27 if (do_thread) { 28 pthread_t p; 29 pthread_create(&p, NULL, roll_dice, (void *) &s); 30 } else { 31 roll_dice(&s); 32 exit(0); 33 } 34 } 35 36 sock = socket_setup(); 37 while (1) { 38 struct sockets *s = get_sockets(sock); 39 if (s) { 40 if (do_thread) { 41 pthread_t p; 42 pthread_create(&p, NULL, roll_dice, (void *) s); 43 } else { 44 roll_dice(s); 45 exit(0); 46 } 47 } 48 } 49 return 0; 50 } 51 52 int 53 socket_setup(void) { 54 struct protoent *tcp_proto; 55 struct sockaddr_in local; 56 int r, s, one; 57 58 tcp_proto = getprotobyname("tcp"); 59 if (!tcp_proto) { 60 fail("Can't find TCP/IP protocol: %s\n", strerror(errno)); 61 } 62 s = socket(PF_INET, SOCK_STREAM, tcp_proto->p_proto); 63 if (s == -1) { 64 fail("socket: %s\n", strerror(errno)); 65 } 66 one = 1; 67 setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)); 68 memset(&local, 0, sizeof(struct sockaddr_in)); 69 local.sin_family = AF_INET; 70 local.sin_port = htons(DICE_PORT); 71 r = bind(s, (struct sockaddr *) &local, sizeof(struct sockaddr_in)); 72 if (r == -1) { 73 fail("bind: %s\n", strerror(errno)); 74 } 75 r = listen(s, 5); 76 if (r == -1) { 77 fail("listen: %s\n", strerror(errno)); 78 } 79 return s; 80 } 81 82 struct sockets * 83 get_sockets(int sock) { 84 int conn; 85 if ((conn = accept(sock, NULL, NULL)) < 0) { 86 warn("accept: %s\n", strerror(errno)); 87 return 0; 88 } else { 89 struct sockets *s; 90 s = malloc(sizeof(struct sockets)); 91 if (s == NULL) { 92 warn("malloc failed.\n"); 93 return 0; 94 } 95 s->local = 0; 96 s->in = fdopen(conn, "r"); 97 s->out = fdopen(conn, "w"); 98 setlinebuf(s->in); 99 setlinebuf(s->out); 100 return s; 101 } 102 } 103
|
|
|
随笔:1
文章:0
评论:0
引用:0
| | 日 | 一 | 二 | 三 | 四 | 五 | 六 |
|---|
| 31 | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 10 | 11 | 12 | 13 | | 14 | 15 | 16 | 17 | 18 | 19 | 20 | | 21 | 22 | 23 | 24 | 25 | 26 | 27 | | 28 | 29 | 30 | 1 | 2 | 3 | 4 | | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
|
常用链接
留言簿
随笔分类
随笔档案
搜索
最新评论

|
|