[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