X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=s51%2Fs51-main.c;fp=s51%2Fs51-main.c;h=9a5ca7c29a5465944ed29ab286be3ac6abd3f930;hp=e8bf2d7dbf65d0020ffa511b2426ffc1ded748df;hb=4c4093c3fdd309123fdd068c0e1ff4947104492d;hpb=55eba4fa08b022197106245d36a70f575a070b0a diff --git a/s51/s51-main.c b/s51/s51-main.c index e8bf2d7d..9a5ca7c2 100644 --- a/s51/s51-main.c +++ b/s51/s51-main.c @@ -43,7 +43,7 @@ main(int argc, char **argv) FILE *console_out = stdout; char *endptr; - while ((opt = getopt(argc, argv, "PVvHht:X:c:Z:s:S:p:")) != -1) { + while ((opt = getopt(argc, argv, "PVvHht:X:c:r:Z:s:S:p:")) != -1) { switch (opt) { case 't': cpu = optarg; @@ -63,6 +63,7 @@ main(int argc, char **argv) break; case 'c': break; + case 'r': case 'Z': s51_port = strtol(optarg, &endptr, 0); if (endptr == optarg || strlen(endptr) != 0) @@ -100,6 +101,11 @@ main(int argc, char **argv) perror ("socket"); exit(1); } + r = setsockopt(l, SOL_SOCKET, SO_REUSEADDR, &one, sizeof (int)); + if (r) { + perror("setsockopt"); + exit(1); + } in.sin_family = AF_INET; in.sin_port = htons(s51_port); in.sin_addr.s_addr = htonl(INADDR_LOOPBACK); @@ -108,11 +114,6 @@ main(int argc, char **argv) perror("bind"); exit(1); } - r = setsockopt(l, SOL_SOCKET, SO_REUSEADDR, &one, sizeof (int)); - if (r) { - perror("setsockopt"); - exit(1); - } r = listen(l, 5); if (r) { perror("listen"); @@ -121,21 +122,23 @@ main(int argc, char **argv) for (;;) { struct sockaddr_in client_addr; socklen_t client_len = sizeof (struct sockaddr_in); - FILE *client; + FILE *client_in, *client_out; - s = accept(r, (struct sockaddr *) + s = accept(l, (struct sockaddr *) &client_addr, &client_len); if (s < 0) { perror("accept"); exit(1); } - client = fdopen(s, "rw"); - if (!client) { + client_in = fdopen(s, "r"); + client_out = fdopen(s, "w"); + if (!client_in || !client_out) { perror("fdopen"); exit(1); } - command_read(client, client); - fclose(client); + command_read(client_in, client_out); + fclose(client_in); + fclose(client_out); } } else command_read(console_in, console_out);