Handling RST,ACK request from Client in RTCS

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

Handling RST,ACK request from Client in RTCS

1,456件の閲覧回数
ravindragurjar
Contributor I

I am using the RTCS stack for a Ethernet server application. The TCP & UDP sockets are working fine. 

When the client application closes the communication from its end, it sends out FIN,ACK. Here the RTCS is closing the socket properly by sending out the response with RST flag set.

However when i close the client application without closing the communication, the client application sends out the request with RST,ACK flags set. In my code, the following condition is met

(RTCS_get_errno() == RTCSERR_SOCK_ESHUTDOWN)

{
  closesocket(sock);

}

However, the RTCS dont send out the RST response to acknowledge the socket close. Is this expected or i am supposed to call some other api instead of closesocket()?

0 件の賞賛
返信
1 返信

1,220件の閲覧回数
danielchen
NXP TechSupport
NXP TechSupport

Hi Ravindra Gurjar

The SO_LINGER socket option indicates how the socket is to be shut down: either gracefully or with an abort operation (TCP reset). If the socket is to be shut down gracefully, RTCS tries to deliver all the data that is in its send buffer for the socket. If you shutting down with an abort operation, RTCS immediately discards the socket and the socket's internal send and receive buffers; The remote endpoint  frees its socket immediately after it sends all the data that is in its send buffer.

Please check the MQX_RTCS_User_Guide.pdf for more details. P110, closesocket()

pastedImage_1.png

Please check the following code to use SO_LINGER socket options:

        struct linger l_options;

        /* Set linger options for RST flag sending. */
        l_options.l_onoff = 1;
        l_options.l_linger_ms = 0;
        setsockopt(sock, SOL_SOCKET, SO_LINGER, &l_options, sizeof(l_options));
        closesocket(sock);

Note:  If this post is helpful, please mark correct or helpful, thank you

Regards

Daniel

0 件の賞賛
返信