aboutsummaryrefslogtreecommitdiff
path: root/tests/echo_srv.c
diff options
context:
space:
mode:
authorAnoop C S <anoopcs@redhat.com>2017-03-02 07:12:50 +0000
committerAndreas Schneider <asn@samba.org>2018-05-02 16:31:42 +0200
commitc48282b7920b6b0037d08b181403042731585d21 (patch)
treeddfc2abecf3059e02e065b5888677c9754e4480f /tests/echo_srv.c
parenta5c08518e985bd3f0cb274c274c034be37fa5629 (diff)
downloadsocket_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/echo_srv.c')
-rw-r--r--tests/echo_srv.c58
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);
}
}