From 06d73f7b3bc84721993e60b1a69e7d5b359362a7 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Wed, 24 Mar 2010 18:43:56 +0100 Subject: [PATCH] [TESTS] add a simple program to test connection resets The "reset" program may be used to send strings then reset connections. --- tests/reset.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 tests/reset.c diff --git a/tests/reset.c b/tests/reset.c new file mode 100644 index 000000000..ec09b9405 --- /dev/null +++ b/tests/reset.c @@ -0,0 +1,45 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int main(int argc, char **argv) { + char *addr; + int port; + int sock; + struct sockaddr_in saddr; + const struct linger nolinger = { .l_onoff = 1, .l_linger = 0 }; + + if (argc < 4) { + fprintf(stderr, + "usage : %s \n" + " This will connect to TCP port : and send string \n" + " then immediately reset.\n", + argv[0]); + exit(1); + } + + addr = argv[1]; + port = atoi(argv[2]); + + sock = socket(AF_INET, SOCK_STREAM, 0); + bzero(&saddr, sizeof(saddr)); + saddr.sin_addr.s_addr = inet_addr(addr); + saddr.sin_port = htons(port); + saddr.sin_family = AF_INET; + + if (connect(sock, (struct sockaddr *)&saddr, sizeof(saddr)) < 0) { + perror("connect"); + exit(1); + } + + send(sock, argv[3], strlen(argv[3]), MSG_DONTWAIT | MSG_NOSIGNAL); + setsockopt(sock, SOL_SOCKET, SO_LINGER, (struct linger *) &nolinger, sizeof(struct linger)); + close(sock); + exit(0); +}