1

在 bufferevent_socket_connect 期间发生错误时,我没有找到在事件处理程序中打印对等方地址的方法。有人可以帮忙吗?

我尝试了什么:

  1. 在 bufferevent_getfd() 上使用 getpeername() 失败,因为未建立连接

  2. 在事件处理程序的最后一个参数中传输对等点的地址也失败了,因为该指针在下一次连接尝试到另一个对等点时发生变化。

代码示例:

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;
        }
        ...
    }
    ...
}
4

0 回答 0