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
  • インポートライブラリ
    • libevent.lib
    • libevent_core.lib
    • libevent_extras.lib
プロジェクトのプロパティ設定
  • ライブラリのディレクトリの追加
    • [構成のプロパティ]->[リンカー]->[全般]->[追加のライブラリディレクトリ]にlibevent*.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);