日期:2014-05-16  浏览次数:20776 次

libevent2需要从socket读一段数据写入一个socket中,同时发送给另一个socket
本帖最后由 ihyy 于 2012-11-13 14:33:19 编辑
实现了前面部分,使用了buffevent。
在收到数据的时候写入一个socket的A链接,同时再建立新连接B复制数据过去。这个新建的B是否可以把socket的链接和绑定都建立在A链接的执行函数中?这样的实现会不会有什么问题?

例:我在函数libevnet_loop中实现event注册和启动socket,链接A。

// 监听读取的socket链接
listener=evconnlistener_new_bind(base, listener_Rd,  (void*)base, LEV_OPT_REUSEABLE|LEV_OPT_CLOSE_ON_FREE,  -1, (struct sockaddr*)&sin, sizeof(sin));

函数listener_Rd中:
    bufferevent_setcb(bev, conn_read, conn_write, conn_event, lo_eventWithState);
  bufferevent_enable(bev, EV_READ);
  bufferevent_disable(bev, EV_WRITE);

我是否可以在listener_Rd中才声明新的socket B并绑定,还是应该在原来声明socket的libevnet_loop中绑定新的B?如果,原声明处增加B之后的evenbuf该如何实现socket链接?
------解决方案--------------------
就是做个反向代理而已, 参考libevent源码包里sample内的proxy.c吧,用的都是现成的函数, 帮你完成非阻塞连接, 然后监听事件.