VisualStudioでlibeventを使うためのメモ
ライブラリのビルドから設定
ソースの入手
公式ページより安定版をダウンロード
ビルド
tarコマンドで展開後,VisualStudio Command Promptを開いて,libeventのディレクトリに移動し,以下のコマンドを実行してビルド
$nmake /f Makefile.nmake
成果物のコピー
以下を適当なディレクトリやプロジェクトファイルのあるディレクトリにコピーする。
ev*.hはincludeディレクトリにコピー
Win32-Code以下にあるヘッダファイルはincludeディレクトリ以下にコピー
Win32-Code/event2以下のヘッダファイルは,include/event2以下にコピー
- ヘッダファイル
- include/
- Win32-Code(Windows用のヘッダファイル)
- event.h
- evdns.h
- evrpc.h
- evutil.h
- evhttp.h
- include/
- インポートライブラリ
- libevent.lib
- libevent_core.lib
- libevent_extras.lib
プロジェクトのプロパティ設定
- ライブラリのディレクトリの追加
- インポートライブラリの追加
- [構成のプロパティ]->[リンカー]->[追加の依存ファイル]に以下のファイルを追加
WS2_32.LIB;wsock32.lib;libevent.lib;libevent_core.lib;libevent_extras.lib
WS_32.LIB, wsock32.libを追加しないと,ビルド時にエラーになります.
実装
初期化
struct evhttp *httpd = NULL; WSADATA wsaData; DWORD dwRet; if (dwRet = ::WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { fprintf(stderr, "WSAStartup failed=%d\n", dwRet); return -1; } event_init();
httpd起動
httpd = evhttp_start("0.0.0.0", 7777);
コールバック関数の定義
Httpリクエストを取得するコールバック関数を定義します
void response_cb(struct evhttp_request *pReq, void *pArg) { /* do something */ }
コールバック登録
Httpリクエストを取得するコールバックを登録します.
evhttp_set_gencb(httpd, response_cb, NULL);
※上記はレガシーなAPIが含まれている(将来的に廃止される可能性あり)ので訂正。
初期化
event_base *pEventBase = event_base_new();
httpd起動
unsigned short port = 8888; evhttp *pHttpd = NULL; struct evhttp_bound_socket *pHttpHandle = NULL; pHttpd = evhttp_new(pEventBase); pHttpHandle = evhttp_bind_socket_with_handle(pHttpd, "0.0.0.0", port); event_base_dispatch(pEventBase);