summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2014-04-10 11:41:31 +0200
committerAndreas Schneider <asn@samba.org>2014-04-14 15:29:13 +0200
commit32c9508b13218d4594c9991d218c93eff1545c86 (patch)
treeba9064a7ea58aafa628f6ad14c9c0ffb8a5f877e
parent4ed4524c5851bbb042caa052f66263b734cf5546 (diff)
downloadsocket_wrapper-32c9508b13218d4594c9991d218c93eff1545c86.tar.gz
socket_wrapper-32c9508b13218d4594c9991d218c93eff1545c86.tar.xz
socket_wrapper-32c9508b13218d4594c9991d218c93eff1545c86.zip
echo_srv: Don't leak client_sock on failures in echo_tcp
Signed-off-by: Jakub Hrozek <jhrozek@redhat.com> Reviewed-by: Andreas Schneider <asn@samba.org> Reviewed-by: Simo Sorce <idra@samba.org>
-rw-r--r--tests/echo_srv.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/tests/echo_srv.c b/tests/echo_srv.c
index e7e6e6c..59d5680 100644
--- a/tests/echo_srv.c
+++ b/tests/echo_srv.c
@@ -395,41 +395,42 @@ static void echo_tcp(int sock)
char buf[BUFSIZE];
ssize_t bret;
- int client_sock;
+ int client_sock = -1;
int s;
s = accept(sock, (struct sockaddr *)&css, &addrlen);
if (s == -1) {
perror("accept");
- return;
+ goto done;
}
client_sock = socket_dup(s);
if (client_sock == -1) {
perror("socket_dup");
- return;
+ goto done;
}
/* Start ping pong */
while (1) {
bret = recv(client_sock, buf, BUFSIZE, 0);
if (bret == -1) {
- close(client_sock);
perror("recv");
- continue;
+ goto done;
} else if (bret == 0) {
break;
}
bret = send(client_sock, buf, bret, 0);
if (bret == -1) {
- close(client_sock);
perror("send");
- continue;
+ goto done;
}
}
- close(client_sock);
+done:
+ if (client_sock != -1) {
+ close(client_sock);
+ }
}
static void echo_udp(int sock)