[Xorp-hackers] Check a connection

illidan illidan at lineway.net
Tue Mar 3 03:42:10 PST 2009


Pavlin Radoslavov wrote:
> You need to consider the
> inbound_connect_event/outgoing_connect_event/error_event/disconnect_event
> XRL upcalls (from the xrl/interfaces/socket4_user.xif API) to track
> the connection status of the sockets.
> The TCP sockets through the FEA are non-blocking hence we can't use
> the tcp_open_bind_connect return status to indicate whether the
> connect request has successfully completed.
>
> Regards,
> Pavlin
>
> illidan <illidan at lineway.net> wrote:
>
>   
>> Hello,
>>
>> I am using socket4 library and I am trying to check if a neighbor A is 
>> reachable.
>> I did something like :
>>
>> void
>> SocketClient::connect() {
>>
>>         XorpCallback2<void, const XrlError&, const string*>::RefPtr cb;
>>         cb = callback(this,&SocketClient::connect_cb);
>>         
>> send_tcp_open_bind_connect("fea",_rtr.instance_name(),_localIP,_localPort,_remoteIP,_remotePort,cb);
>> }
>>
>> void
>> SocketClient::connect_cb(const XrlError& e,const string* socket_id) {
>>     if (e != XrlError::OKAY()) {
>>         XLOG_ERROR("%s\n", "Error");
>>     } else {
>>         _socket_id = *socket_id;
>>         _connected = true;
>>     }
>> }
>>
>> SocketClient::send_data(vector<uint8_t> data) {
>>     if(connected()) {
>>         XLOG_INFO("%s\n", "Try to send data...");
>>         XorpCallback1<void, const XrlError&>::RefPtr cb;
>>         cb = callback(this,&SocketClient::send_data_cb);
>>         send_send("fea",_socket_id,data,cb);
>>         //send_send_to("fea",_socket_id,_remoteIP,_remotePort,data,cb);
>>     }
>> }
>>
>> void
>> SocketClient::send_data_cb(const XrlError& e) {
>>     if(e!=XrlError::OKAY()) {
>>        XLOG_ERROR("%s %s\n", "ERROR :",e.str().c_str());
>>     } else {
>>         XLOG_INFO("%s\n", "Packet send");
>>     }
>>     _is_waiting = false;
>> }
>>
>> I was supposing that if the neighbor doesn't exist, socket4 will return 
>> an error on connect_cb function, but apparently it doesnt.
>>
>> When I run this code with a remote neighbor which doesn't exist, I got 
>> an error :
>>
>> [ 2009/03/02 14:59:23 INFO xorp_consensus CONSENSUS ] Try to send data...
>> [ 2009/03/02 14:59:23  ERROR xorp_fea:3591 LIBXORP +811 asyncio.cc start 
>> ] AsyncFileWriter: Failed to add I/O event callback.
>> [ 2009/03/02 14:59:23 INFO xorp_consensus CONSENSUS ] Packet send
>>
>> So I don't really know how to check if a neighbor is reachable or not.
>> Can you help me???
>>
>> Thank you!
>>
>> Michael
>>
>> _______________________________________________
>> Xorp-hackers mailing list
>> Xorp-hackers at icir.org
>> http://mailman.ICSI.Berkeley.EDU/mailman/listinfo/xorp-hackers
>>     
It works!
Thanks.

Michael



More information about the Xorp-hackers mailing list