我没有找到在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;
}
...
}
...
}