summaryrefslogtreecommitdiff
path: root/utils/benchmarks/events/deadconn.c
diff options
context:
space:
mode:
Diffstat (limited to 'utils/benchmarks/events/deadconn.c')
-rw-r--r--utils/benchmarks/events/deadconn.c89
1 files changed, 89 insertions, 0 deletions
diff --git a/utils/benchmarks/events/deadconn.c b/utils/benchmarks/events/deadconn.c
new file mode 100644
index 0000000000..364371a1e9
--- /dev/null
+++ b/utils/benchmarks/events/deadconn.c
@@ -0,0 +1,89 @@
+/*
+ * deadconn - a tool for dead http connections creation
+ *
+ * 07-01-2001 by Davide Libenzi <davidel@xmailserver.org>
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <sys/time.h>
+#include <time.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/file.h>
+#include <sys/socket.h>
+#include <netdb.h>
+#include <signal.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <sys/wait.h>
+#include <fcntl.h>
+#include <errno.h>
+
+#define MAX_CONNECT_ERRORS 4
+
+int tconnect(struct in_addr const *paddr, int port) {
+ int sfd;
+ struct sockaddr_in sin;
+ if ((sfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
+ perror("socket");
+ return -1;
+ }
+ memset(&sin, 0, sizeof(sin));
+ memcpy(&sin.sin_addr, &paddr->s_addr, 4);
+ sin.sin_port = htons((short int) port);
+ sin.sin_family = AF_INET;
+ if (connect(sfd, (struct sockaddr *) &sin, sizeof(sin)) == 0) {
+ return sfd;
+ }
+ perror("connect");
+ close(sfd);
+ return -1;
+}
+
+int main(int argc, char *argv[]) {
+ int ii, sfd, errors;
+ char *server;
+ int port;
+ int nconns, ccreat = 0;
+ struct hostent * he;
+ struct in_addr inadr;
+ struct sockaddr_in sin;
+ if (argc < 4) {
+ printf("use: %s server port numconns\n", argv[0]);
+ return 1;
+ }
+ server = argv[1];
+ port = atoi(argv[2]);
+ nconns = atoi(argv[3]);
+ if (inet_aton(server, &inadr) == 0) {
+ if ((he = gethostbyname(server)) == NULL) {
+ fprintf(stderr, "unable to resolve: %s\n", server);
+ return -1;
+ }
+ memcpy(&inadr.s_addr, he->h_addr_list[0], he->h_length);
+ }
+ for (ii = 0; ii < nconns; ii++) {
+ errors = 0;
+ retry:
+ if ((sfd = tconnect(&inadr, port)) != -1) {
+ char const *req = "GET / HTTP/1.0\r\n";
+ write(sfd, req, strlen(req));
+ ++ccreat;
+ errors = 0;
+ printf("%d\n", ccreat);
+ } else {
+ sleep(1);
+ if (++errors < MAX_CONNECT_ERRORS)
+ goto retry;
+ break;
+ }
+ }
+ printf("%d connections created ...\n", ccreat);
+ while (1)
+ sleep(10);
+ return 0;
+}