Fix listener / echo servers to handle char mode
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 9 Oct 2015 15:02:10 +0000 (11:02 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 15 Oct 2015 17:35:24 +0000 (13:35 -0400)
If you telnet in character mode, the server wouldn't output the input,
though it would correctly echo the input back to the client.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
tests/epoll_server.c
tests/listener.c

index 6200562..420f5d2 100644 (file)
@@ -46,7 +46,6 @@ int main()
        char adir[40], ldir[40];
        int n;
        char buf[256];
-       char debugbuf[256];
        /* We'll use this to see if we actually did epoll_waits instead of blocking
         * calls.  It's not 100%, but with a human on the other end, it should be
         * fine. */
@@ -216,10 +215,11 @@ int main()
        }
        /* echo until EOF */
        has_epolled = FALSE;
+       printf("Server read: ");
        while (1) {
                while ((n = read(dfd, buf, sizeof(buf))) > 0) {
-                       snprintf(debugbuf, n, "%s", buf);
-                       printf("Server read: %s", debugbuf);
+                       for (int i = 0; i < n; i++)
+                               printf("%c", buf[i]);
                        fflush(stdout);
                        /* Should epoll on this direction too. */
                        if (write(dfd, buf, n) < 0) {
index 614d006..c5787a4 100644 (file)
@@ -48,7 +48,6 @@ int main()
        char adir[40], ldir[40];
        int n;
        char buf[256];
-       char debugbuf[256];
 
 #ifdef PLAN9NET
        printf("Using Plan 9's networking stack\n");
@@ -132,9 +131,10 @@ int main()
 #endif
 
        /* echo until EOF */
+       printf("Server read: ");
        while ((n = read(dfd, buf, sizeof(buf))) > 0) {
-               snprintf(debugbuf, n, "%s", buf);
-               printf("Server read: %s", debugbuf);
+               for (int i = 0; i < n; i++)
+                       printf("%c", buf[i]);
                fflush(stdout);
                write(dfd, buf, n);
        }