如何在bufferevent_socket_connect期间在事件处理程序中获取错误的对等地址?

时间:2012-10-30 05:26:55

标签: libevent

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

我尝试了什么:

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

  2. 在事件处理程序的最后一个参数中传输对等体的地址也会失败,因为此指针会在下次连接尝试时更改为另一个对等体。

  3. 代码示例:

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

0 个答案:

没有答案