http://www.apsis.ch/pound/
昼休みにPoundのソースを読んでいる。ApacheやRubyに比べると圧倒的にコンパクトかつきれいなコードなので、大変読みやすい(設計の善し悪しは僕には分からない)。
それはさておき、svc.cの1375行目あたりにthr_controlというリクエストを待ち受ける関数があって、pollで読み出し可能かどうかを調べているのだけれと、pollの第一引数に単体の構造体のアドレスを渡していたので、少し混乱した。配列を受け取るんじゃなかったっけ?
void * thr_control(void *arg) { ... struct pollfd polls; ... for(;;) { polls.fd = control_sock; polls.events = POLLIN | POLLPRI; polls.revents = 0; if(poll(&polls, 1, -1) < 0) { logmsg(LOG_WARNING, "thr_control() poll: %s", strerror(errno)); continue; }
それでまあしばらく考えてみて、ポインタで渡せば単体も配列も関係ないことに気がついた。
C初心者にはいろいろ発見があるなぁ。