How to test if socket connection is still there?

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

How to test if socket connection is still there?

894 Views
drummer
Contributor IV

I am using MQX v3.6 with colfire 7.2. I have searched the board and can't find any answer so I'm putting it out there.

How can I check if my socket connection is still there?

I am using accept() and once inside it doesn't return unless the other connection has been aborted.

But what if the cable is diconnected or the connection is lost?

How can I tell?

In my code example I am checking each time that the server on the other side is always the original to prevent some other location from stealing my connection.

 

   while(socket_flag == TRUE)    {    sock2 = accept(listensock, &raddr, &addr_length);    return_error_if(sock2 == RTCS_SOCKET_ERROR);    if(addr.sin_addr.s_addr == raddr.sin_addr.s_addr)    {     shutdown(sock, FLAG_CLOSE_TX);     fclose(sockfd);     sockfd = fopen("socket:", (char_ptr)sock2);     socket_flag = TRUE;    }    else    {     diag_led_red();     RTCS_time_delay(100);     continue;    }    sock = accept(listensock, &addr, &addr_length);    return_error_if(sock == RTCS_SOCKET_ERROR);    if(addr.sin_addr.s_addr == raddr.sin_addr.s_addr)    {     shutdown(sock2, FLAG_CLOSE_TX);     fclose(sockfd);     sockfd = fopen("socket:", (char_ptr)sock);     socket_flag = TRUE;    }    else    {     diag_led_grn();     RTCS_time_delay(100);     continue;    }           }//while(socket_flag == TRUE)

 

Labels (1)
Tags (1)
0 Kudos
5 Replies

462 Views
Tgomes
Contributor III

Hi drummer,

 

 

I do not know if this resolves your case, but you can at least know if the ethernet cable is connected using the function ipcfg_get_link_active.

 

 

 

Best Regards.

0 Kudos

462 Views
drummer
Contributor IV

thanks for your input.

I tried several things:

ipcfg_get_link_active(DEFAULT_ENET_DEVICE)

ipcfg_get_state(DEFAULT_ENET_DEVICE)

prior to initialization ipcfg_get_link_active returns 0

afterwords it returns 1 always.

ipcfg_get_state looked more promising because it returned 0,1,2,3 depending on its state but couldn't tell if I had disconnected.

One of
• IPCFG_STATE_INIT
• IPCFG_STATE_UNBOUND
• IPCFG_STATE_BUSY
• IPCFG_STATE_STATIC_IP
• IPCFG_STATE_DHCP_IP
• IPCFG_STATE_AUTO_IP
• IPCFG_STATE_DHCPAUTO_IP
• IPCFG_STATE_BOOT

 

 

0 Kudos

462 Views
monXii
Contributor III

same issue here ..

.. some new ideas? =)

0 Kudos

462 Views
Tgomes
Contributor III

Hi,

 

Have you checked the hardware connections? I ask this because I had a problem very similar to this, and the cause was the connection between the connector and the transceiver (DP83640). Two wires were reversed and some resistors in the wrong place.

 

Best regards.

0 Kudos

462 Views
monXii
Contributor III

mh.. can't believe that the wiring is incorrect ..

.. cause ethernet works fine! but only the cable detection ..

i'll try it on the tower ..

0 Kudos