94 lines
2.2 KiB
C
94 lines
2.2 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 = -1;
|
|
long last_report_bytecount = 0;
|
|
|
|
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:test10:0:5:test15:login)(4:post7:factory(6:create5:queue(2:q1)5:test11:k)0:)(4:post2:q1(9:subscribe0:5:test18:consumer5:test11:k)0:)\n");
|
|
fflush(f);
|
|
|
|
#define MESSAGESIZE 65
|
|
|
|
while (1) {
|
|
char buf[1024];
|
|
size_t n = read(fd, buf, sizeof(buf));
|
|
if (n == 0) break;
|
|
if (n >= 16) {
|
|
if (!memcmp(buf, "(4:post8:consumer", 16)) {
|
|
if (bytecount == -1) {
|
|
printf("Buffer at start: <<%.*s>>\n", (int) n, buf);
|
|
printf("Starting.\n");
|
|
bytecount = 0;
|
|
gettimeofday(&start_time, NULL);
|
|
}
|
|
}
|
|
}
|
|
if (bytecount >= 0) {
|
|
bytecount += n;
|
|
if ((bytecount - last_report_bytecount) > (100000 * MESSAGESIZE)) {
|
|
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 received %ld bytes in %g seconds = %g bytes/sec and %g msgs/sec\n",
|
|
bytecount,
|
|
delta,
|
|
bytecount / delta,
|
|
bytecount / (delta * MESSAGESIZE));
|
|
fflush(stdout);
|
|
last_report_bytecount = bytecount;
|
|
}
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|