ぶろぐ

日記です

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

動いとる^^