[Xorp-hackers] Check a connection

Pavlin Radoslavov pavlin at ICSI.Berkeley.EDU
Mon Mar 2 10:33:29 PST 2009


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



More information about the Xorp-hackers mailing list