Created
November 7, 2012 03:41
-
-
Save khakimov/4029456 to your computer and use it in GitHub Desktop.
libevent http client
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <sys/types.h> | |
#include <sys/time.h> | |
#include <sys/queue.h> | |
#include <stdlib.h> | |
#include <err.h> | |
#include <event.h> | |
#include <evhttp.h> | |
#include <unistd.h> | |
#include <stdio.h> | |
#include <sys/socket.h> | |
#include <netinet/in.h> | |
#include <time.h> | |
#include <pthread.h> | |
#define BUFSIZE 4096 | |
#define NUMCONNS 2000 | |
#define SERVERADDR "127.0.0.1" | |
#define SERVERPORT 80 | |
#define SLEEP_MS 10 | |
char buf[BUFSIZE]; | |
int bytes_recvd = 0; | |
int chunks_recvd = 0; | |
int closed = 0; | |
int connected = 0; | |
// called per chunk received | |
void chunkcb(struct evhttp_request * req, void * arg) | |
{ | |
int s = evbuffer_remove( req->input_buffer, &buf, BUFSIZE ); | |
//printf("Read %d bytes: %s\n", s, &buf); | |
bytes_recvd += s; | |
chunks_recvd++; | |
if(connected >= NUMCONNS && chunks_recvd%10000==0) | |
printf(">Chunks: %d\tBytes: %d\tClosed: %d\n", chunks_recvd, bytes_recvd, closed); | |
} | |
// gets called when request completes | |
void reqcb(struct evhttp_request * req, void * arg) | |
{ | |
closed++; | |
} | |
int main(int argc, char **argv) | |
{ | |
event_init(); | |
struct evhttp *evhttp_connection; | |
struct evhttp_request *evhttp_request; | |
char path[32]; // eg: "/test/123" | |
int i,octet; | |
for(i=1;i<=NUMCONNS;i++) { | |
evhttp_connection = evhttp_connection_new(SERVERADDR, SERVERPORT); | |
evhttp_request = evhttp_request_new(reqcb, NULL); | |
evhttp_request->chunk_cb = chunkcb; | |
sprintf(&path, "/test/%d", ++connected); | |
if(i%100==0) printf("Req: %s\t->\t%s\n", "/test", &path); | |
evhttp_make_request( evhttp_connection, evhttp_request, EVHTTP_REQ_GET, path ); | |
// evhttp_connection_set_timeout(evhttp_request->evcon, 864000); | |
event_loop( EVLOOP_NONBLOCK ); | |
if( connected % 200 == 0 ) | |
printf("\nChunks: %d\tBytes: %d\tClosed: %d\n", chunks_recvd, bytes_recvd, closed); | |
usleep(SLEEP_MS*1000); | |
} | |
event_dispatch(); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment