ん~。
当然IOCP対応してるんだろーと思ったらlibevent-1.4.10-stableでは未対応なのね...
libevent-2.0.1-alphaのWhat's newにはIOCPに対応始めたみたいなことが書いてある。
vc90でビルドするのも一手間必要。
なんとかregressにパスするバイナリ作れたのでテストコード。
evhttpd.cc
#include <stdio.h>
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <winsock2.h>
#include <event.h>
#include <evhttp.h>
#pragma comment(lib, "ws2_32")
struct EnableWinsock
{
EnableWinsock(){
WSADATA wsaData;
const int r = WSAStartup(MAKEWORD(2, 2), &wsaData);
}
~EnableWinsock(){
WSACleanup();
}
};
void root_handler(evhttp_request* req, void* arg)
{
evbuffer* buf = evbuffer_new();
if(!buf){
puts("failed to create response buffer");
return;
}
evbuffer_add_printf(buf, "Hello: %s\n", evhttp_request_uri(req));
evhttp_send_reply(req, HTTP_OK, "OK", buf);
}
void generic_handler(evhttp_request* req, void* arg)
{
evbuffer* buf = evbuffer_new();
if(!buf){
puts("failed to create response buffer");
return;
}
evbuffer_add_printf(buf, "Requested: %s\n", evhttp_request_uri(req));
evhttp_send_reply(req, HTTP_OK, "OK", buf);
}
int wmain(int argc, wchar_t* argv[])
{
EnableWinsock enableWinsock;
event_init();
evhttp* httpd = evhttp_start("0.0.0.0", 8880);
if(!httpd){ return 1; }
evhttp_set_cb(httpd, "/", root_handler, NULL);
evhttp_set_gencb(httpd, generic_handler, NULL);
event_dispatch();
evhttp_free(httpd);
return 0;
}
0 件のコメント:
コメントを投稿