memcachedコードリーディング(1)
memcachedをコード・リーディングしてみることにした。
まずはgithubからコードを取得し、はじめのコミットに戻りコンパイルしてみるところまで。
# コード取得 git clone git@github.com:memcached/memcached.git cd memcached # first commit まで戻る git reset --hard 32f382b605b4565bddfae5c9d082af3bfd30cf02 # ライブラリインストール brew install libevent brew install judy # -staticオプションはcrt0.oがないyoと怒られるので外す gcc -g -I. -L. -o memcached-debug memcached.c -levent -lJudy
gcc-2.95でコンパイルされることを前提にしたコードのようで、返り値にintが定義された関数のreturnで0を省略するとコンパイルエラーになってしまう。微修正。
git diff diff --git a/memcached.c b/memcached.c index 8ba15e9..d1e9fc2 100644 --- a/memcached.c +++ b/memcached.c @@ -758,7 +758,7 @@ int try_read_network(conn *c) { int update_event(conn *c, int new_flags) { if (c->ev_flags == new_flags) - return; + return 1; if (event_del(&c->event) == -1) return 0; event_set(&c->event, c->sfd, new_flags, event_handler, (void *)c); c->ev_flags = new_flags; @@ -1190,6 +1190,6 @@ int main (int argc, char **argv) { /* enter the loop */ event_loop(0); - return; + return 1; }
telnetでつなぐ
$ telnet 127.0.0.1 11211 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. set hoge 0 0 3 foo STORED get hoge VALUE hoge 0 3 foo END stats cachedump 13 1000 ITEM hoge [3 b; 1461908919 s] END
動いとる^^