bufferevent

libevent では、ディスクリプタへの読み書きがとても簡単に実装できます。


bufev = bufferevent_new(fd, readcb, writecb, errorcb, NULL);
bufferevent_enable(bufev, EV_READ);

fd は対象ディスクリプタ
readcb, writecb, errorcb へはそれぞれ読み、書き、エラーを行うコールバックを指定します。

行読みしたいなら、readcb はこう書けます。


void
readcb(struct bufferevent *bufev, void *arg)
{
char *buf;

buf = evbuffer_readline(bufev->input);
if (buf == NULL) {
return;
}

printf("buf=%s\n", buf);
}

簡単ですね。

注意点として、errorcb だけプロトタイプが違い、どんなエラーが起きたかを指定します。


void errorcb(struct bufferevent *bufev, short event, void *arg);