[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