在 bufferevent_socket_connect 期间发生错误时,我没有找到在事件处理程序中打印对等方地址的方法。有人可以帮忙吗?
我尝试了什么:
在 bufferevent_getfd() 上使用 getpeername() 失败,因为未建立连接
在事件处理程序的最后一个参数中传输对等点的地址也失败了,因为该指针在下一次连接尝试到另一个对等点时发生变化。
代码示例:
void eventcb(struct bufferevent *bev, short events, void *ptr)
{
if (events & BEV_EVENT_ERROR)
{
// I whant to print peer's address on error in bufferevent_socket_connect
bufferevent_free(bev);
}
}
int main()
{
...
struct sockaddr_storage obj;
...
while(get_next_obj(obj))
{
evutil_socket_t sock = socket(obj.ss_family, SOCK_STREAM, 0);
evutil_make_socket_nonblocking(sock);
evutil_make_listen_socket_reuseable(sock);
evutil_make_socket_closeonexec(sock);
struct bufferevent *evbev =
bufferevent_socket_new(evbase, sock, 0);
bufferevent_set_timeouts(evbev, &sec5, &sec5);
bufferevent_setcb(evbev, readcb, NULL, eventcb, evbase);
bufferevent_enable(evbev, EV_READ|EV_WRITE);
bufferevent_write(evbev, some_data.data(), some_data_sz);
if(bufferevent_socket_connect(evbev, (struct sockaddr *)&obj, sizeof(sockaddr_storage)) < 0) {
continue;
}
...
}
...
}