It is probably a misconception on my side. I'm pretty good at misconceptions. :-)
OK, then I code a simple client. (There are som short-cuts to avoid a lot of code, but this compiles and runs with -std=gnu99)
#include <event2/dns.h>
#include <event2/bufferevent.h>
#include <event2/buffer.h>
#include <event2/util.h>
#include <event2/event.h>
#include <stdlib.h>
#include <stdio.h>
void buffercb(struct evbuffer *input, const struct evbuffer_cb_info *info, void *ptr)
{
#if 1
  char *request_line;
  size_t len;
  request_line = evbuffer_readln( input, &len, EVBUFFER_EOL_CRLF );
  if ( request_line ){
    printf("%s\n", request_line ); fflush( stdout );
    free( request_line );
  }
#else
  char buf[1024];
  int n;
  while ((n = evbuffer_remove(input, buf, sizeof(buf))) > 0) {
    fwrite(buf, 1, n, stdout);
  }
#endif
}
int main(int argc, char **argv)
{
  struct event_base *base;
  struct evdns_base *dns_base;
  struct bufferevent *bev;
  if( argc != 3 ){
    printf("Usage: %s host port", argv[0]);
    return -1;
  }
  base = event_base_new();
  dns_base = evdns_base_new(base, 1);
  bev = bufferevent_socket_new(base, -1, BEV_OPT_CLOSE_ON_FREE);
  bufferevent_setcb(bev, NULL, NULL, NULL, base);
  bufferevent_enable(bev, EV_READ|EV_WRITE);
  bufferevent_socket_connect_hostname(
    bev, dns_base, AF_UNSPEC, argv[1], atoi(argv[2]));
  evbuffer_add_cb( bufferevent_get_input(bev), buffercb, NULL );
  event_base_dispatch(base);
  return 0;
}
How come? I still think the problem is in my conception of the buffer. At least, I can still not get it working as expected with evbuffer_readln(). :-)