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 <[email protected]> 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 > [email protected] > http://mailman.ICSI.Berkeley.EDU/mailman/listinfo/xorp-hackers _______________________________________________ Xorp-hackers mailing list [email protected] http://mailman.ICSI.Berkeley.EDU/mailman/listinfo/xorp-hackers
