Hi,
I have a TCP-IP server with two clients respectively on Port 81 and Port 82. Interesting thing is when I disconnect the client and reconnect, it works fine for exactly two times. However after trying to connect 3rd time, 'RTCS_selectset' throws an error message 'RTCS_SOCKET_ERROR' and connection fails permanently until I jump to RTCS/TCP-IP socket initialization.
However in field application, disconnection is frequent and I can not restart my K70 board if this happens. Again assume when Port 81 failed permanently after above scenario, Port 82 is still working fine with send-receive as it has not been disconnected - reconnected for 2 times. Can anyone help me in this?
E.g. One scenario
Port 81 - Connect (works) - Disconnect - Connect (works) - Disconnect - Connect (doesn't works). == Port 81 dead until re initialization of RTCS/TCP ==
Port 82 - Connect (works) - No Action - No Action - Disconnect - Connect (works) - No Action - Disconnect - Connect (doesn't works). == Port 82 dead until re initialization of RTCS/TCP ==
Solved! Go to Solution.
Hi Pravin,
Probably you are setting a small number of sockets and the socket timeout is too long. Therefore, if you close all the sockets you have available and you don't wait until their timeout expires you will not be able to use another socket.
You can use function setsockopt() to manage sockets timeouts. These timeouts are declared in tcp_prv.h on the RTCS library project.
#define TCP_MSL | 120000L /* Maximum Segment Lifetime; the |
longest time that a packet can | |
travel in the Internet (2 min) */ |
#define TCP_WAITTIMEOUT (2 * TCP_MSL) /* timeout for TIME_WAIT state, defined
as 2 * MSL (4 min) */ |
#define TCP_SENDTIMEOUT_MIN 100000L /* as per RFC1122 4.2.3.5 */
#define TCP_OPENTIMEOUT_MIN 180000L /* as per RFC1122 4.2.3.5 */
But you can override these values with setsockopt().
You can also increase the number of sockets. It is possible customize runtime RTCS configuration before call the function RTCS_create() just as the web_hvac does in the C:\Freescale\Freescale MQX 4.1\demo\web_hvac\RTCS.c file.
/* runtime RTCS configuration */
_RTCSPCB_init = 4;
_RTCSPCB_grow = 2;
_RTCSPCB_max = 20;
_RTCS_msgpool_init = 4;
_RTCS_msgpool_grow = 2;
_RTCS_msgpool_max = 20;
_RTCS_socket_part_init = 4;
_RTCS_socket_part_grow = 2;
_RTCS_socket_part_max = 20;
I hope this helps.
Best regards,
Carlos
Technical Support Engineer
Hi Pravin,
Probably you are setting a small number of sockets and the socket timeout is too long. Therefore, if you close all the sockets you have available and you don't wait until their timeout expires you will not be able to use another socket.
You can use function setsockopt() to manage sockets timeouts. These timeouts are declared in tcp_prv.h on the RTCS library project.
#define TCP_MSL | 120000L /* Maximum Segment Lifetime; the |
longest time that a packet can | |
travel in the Internet (2 min) */ |
#define TCP_WAITTIMEOUT (2 * TCP_MSL) /* timeout for TIME_WAIT state, defined
as 2 * MSL (4 min) */ |
#define TCP_SENDTIMEOUT_MIN 100000L /* as per RFC1122 4.2.3.5 */
#define TCP_OPENTIMEOUT_MIN 180000L /* as per RFC1122 4.2.3.5 */
But you can override these values with setsockopt().
You can also increase the number of sockets. It is possible customize runtime RTCS configuration before call the function RTCS_create() just as the web_hvac does in the C:\Freescale\Freescale MQX 4.1\demo\web_hvac\RTCS.c file.
/* runtime RTCS configuration */
_RTCSPCB_init = 4;
_RTCSPCB_grow = 2;
_RTCSPCB_max = 20;
_RTCS_msgpool_init = 4;
_RTCS_msgpool_grow = 2;
_RTCS_msgpool_max = 20;
_RTCS_socket_part_init = 4;
_RTCS_socket_part_grow = 2;
_RTCS_socket_part_max = 20;
I hope this helps.
Best regards,
Carlos
Technical Support Engineer
Hi Carlos,
Thanks a lot!! It works!!!
Best Regards,
Pravin
Happy to help Pravin.
Regards,
Carlos