diff options
author | Anoop C S <anoopcs@redhat.com> | 2017-03-02 07:12:50 +0000 |
---|---|---|
committer | Andreas Schneider <asn@samba.org> | 2018-05-02 16:31:42 +0200 |
commit | c48282b7920b6b0037d08b181403042731585d21 (patch) | |
tree | ddfc2abecf3059e02e065b5888677c9754e4480f /tests | |
parent | a5c08518e985bd3f0cb274c274c034be37fa5629 (diff) | |
download | socket_wrapper-c48282b7920b6b0037d08b181403042731585d21.tar.gz socket_wrapper-c48282b7920b6b0037d08b181403042731585d21.tar.xz socket_wrapper-c48282b7920b6b0037d08b181403042731585d21.zip |
tests: Modify echo server to accept multiple connections
In context of multiple threads, echo server must be capable of
accepting connections in a loop rather than be satisfied with
one incoming connection.
Signed-off-by: Anoop C S <anoopcs@redhat.com>
Reviewed-by: Michael Adam <obnox@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/echo_srv.c | 58 |
1 files changed, 35 insertions, 23 deletions
diff --git a/tests/echo_srv.c b/tests/echo_srv.c index 5b784de..2f877f4 100644 --- a/tests/echo_srv.c +++ b/tests/echo_srv.c @@ -497,39 +497,51 @@ static void echo_tcp(int sock) int client_sock = -1; int s; + pid_t pid; - s = accept(sock, &addr.sa.s, &addr.sa_socklen); - if (s == -1) { - perror("accept"); - goto done; - } - - client_sock = socket_dup(s); - if (client_sock == -1) { - perror("socket_dup"); - goto done; - } - - /* Start ping pong */ while (1) { - bret = recv(client_sock, buf, BUFSIZE, 0); - if (bret == -1) { - perror("recv"); + s = accept(sock, &addr.sa.s, &addr.sa_socklen); + if (s == -1) { + perror("accept"); goto done; - } else if (bret == 0) { - break; } - bret = send(client_sock, buf, bret, 0); - if (bret == -1) { - perror("send"); - goto done; + pid = fork(); + if (pid == -1) { + perror("fork"); + } else if (pid == 0) { + close(sock); + client_sock = socket_dup(s); + if (client_sock == -1) { + perror("socket_dup"); + goto done; + } + + while (1) { + bret = recv(client_sock, buf, BUFSIZE, 0); + if (bret == -1) { + perror("recv"); + goto done; + } else if (bret == 0) { + break; + } + + bret = send(client_sock, buf, bret, 0); + if (bret == -1) { + perror("send"); + goto done; + } + } + close(s); + exit(0); + } else { + close(s); } } done: if (client_sock != -1) { - close(client_sock); + close(client_sock); } } |