- ev = xmalloc(sizeof *ev);
- event_set(ev, newfd, EV_READ | EV_PERSIST, handle_control_data, ev);
- event_add(ev, NULL);
+ ev = bufferevent_new(newfd, handle_control_data, NULL, handle_control_error, NULL);
+ if(!ev) {
+ logger(LOG_ERR, _("Could not create bufferevent for new control connection: %s"), strerror(errno));
+ close(newfd);
+ return;
+ }
+
+ memset(&greeting, 0, sizeof greeting);
+ greeting.version = TINC_CTL_VERSION_CURRENT;
+ if(bufferevent_write(ev, &greeting, sizeof greeting) == -1) {
+ logger(LOG_ERR,
+ _("Cannot send greeting for new control connection: %s"),
+ strerror(errno));
+ bufferevent_free(ev);
+ close(newfd);
+ return;
+ }
+
+ bufferevent_enable(ev, EV_READ);