hop-2012/server/test3.c

93 lines
2.0 KiB
C

/* Copyright (C) 2010, 2011 Tony Garnock-Jones. All rights reserved. */
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/uio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <fcntl.h>
#include <sys/wait.h>
#include <time.h>
#include <sys/time.h>
#include <assert.h>
int main(int argc, char *argv[]) {
int fd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in s;
FILE *f;
struct timeval start_time;
long bytecount = 0;
char const *msg = "(4:post2:q1(4:post0:6:XXXXXX0:)0:)";
size_t msglen = strlen(msg);
int i;
if (argc < 2) {
fprintf(stderr, "Usage: test1 <serverhostname>\n");
exit(1);
}
{
struct hostent *h = gethostbyname(argv[1]);
if (h == NULL) {
fprintf(stderr, "serverhostname lookup: %d\n", h_errno);
exit(1);
}
s.sin_family = AF_INET;
s.sin_addr.s_addr = * (uint32_t *) h->h_addr_list[0];
s.sin_port = htons(5671);
}
if (connect(fd, (struct sockaddr *) &s, sizeof(s)) < 0) return 1;
{
int i = 1;
setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &i, sizeof(i));
}
f = fdopen(fd, "a+");
fprintf(f, "(9:subscribe5:test30:0:5:test35:login)");
fflush(f);
usleep(100000);
{
char buf[4096];
size_t n = read(fd, buf, sizeof(buf));
printf("Received: <<%.*s>>\n", (int) n, buf);
}
gettimeofday(&start_time, NULL);
for (i = 0; i < 10000000; i++) {
fwrite(msg, msglen, 1, f);
bytecount += msglen;
if ((bytecount % 100000) < msglen) {
struct timeval now;
double delta;
gettimeofday(&now, NULL);
delta = (now.tv_sec - start_time.tv_sec) + (now.tv_usec - start_time.tv_usec) / 1000000.0;
printf("So far sent %ld bytes in %g seconds = %g bytes/sec and %g msgs/sec\n",
bytecount,
delta,
bytecount / delta,
bytecount / (delta * msglen));
fflush(stdout);
}
}
fprintf(f, "(11:unsubscribe5:test3)");
fflush(f);
fclose(f);
return 0;
}