Unexpected behavior with RTCS_selectset() and accept() for TCP server socket

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

Unexpected behavior with RTCS_selectset() and accept() for TCP server socket

2,336 次查看
tmeyer
Contributor III

Hi all.

 

I am running a Kinetis K60 Tower.

I have a simple TCP server setup to listen for incoming client connections. I am able to detect (with RTCS_selectset) and accept incoming client connections as expected for a few connections (say 10-15) . Then randomly upon attempting to connect to the server, the listening sever socket enters a state where RTCS_selectset() will immediately return indicating there is a client ready, accept return immediately with return code RTCS_SOCKET_ERROR. However when calling RTCS_geterror(server_socket) I get RTCS_OK. It is like select says a client is waiting to connect, and accept is trying but failing to accpet the connection - but not providing an error.

Furthermore when this state is entered, even shutting down and and creating a new server socket continue to behave this way.  

 

Any suggestions?

 

Thanks

Tim

 

while(retry){client_socket = RTCS_selectset(&server_socket, 1, BSP_ETHERNET_CONNECTION_TIMEOUT);  if(client_socket == RTCS_SOCKET_ERROR)   {      break;  }   else if(client_socket == server_socket)   {   client_socket = accept(server_socket, NULL, NULL);    if(client_socket == RTCS_SOCKET_ERROR)    {    int status = RTCS_geterror(server_socket);    if (status == RTCS_OK)     {     /// keeps ending up here when in bad state    }....

 

标签 (1)
标记 (1)
0 项奖励
回复
6 回复数

1,594 次查看
netra
Contributor IV

Hi,

Can anyone tell how to know , whether socket is shutdown or not??

after shutting down  the socket , still i am unable to create to create socket again.

It throwing error in bind().

Plz reply

Thanks,

Netra

0 项奖励
回复

1,594 次查看
Luis_Garabo
NXP TechSupport
NXP TechSupport


Hi Tim,

Sometimes it is necessary to release the sockets from connections that were closed. It happened to me that I wasn't closing the sockets of clients that were leaving the server and the resources weren't been released by MQX in a big period of time and then there were no more resources to create new sockets for the new incomming connections.

Are you closing the sockets in the server side once the client left the connection?

I hope this helps.

Garabo

0 项奖励
回复

1,594 次查看
MPotts
Contributor III

I found the problem to be using

      shutdown(sock, FLAG_CLOSE_TX);

which does not release the internal socket context for four minutes. Using

      shutdown(sock, FLAG_ABORT_CONNECTION);

released the socket context immediately and accepted another connection.

Mark


1,594 次查看
Luis_Garabo
NXP TechSupport
NXP TechSupport

It is good you foind the solution! Congrats!

0 项奖励
回复

1,594 次查看
edgarsevilla
Contributor II

Happens to me as well when I try to make a second connection to the same server

Any Ideas??

Thanks

Edgar Sevilla

0 项奖励
回复

1,594 次查看
MPotts
Contributor III

Hi Tim,

 

I'm afraid this is not advice, just a report of somewhat similar behavior. I am also running a simple socket server that runs ok for a while and then fails. In my case calls to RTCS_selectset on a listening socket that was working no longer signal when a connection is being attempted.

 

        while (!resetip)
        {
            rc = RTCS_selectset(&sock, 1, 1000);
            if (rc == RTCS_SOCKET_ERROR) { err = "RTCS_selectset"; goto error; }
            if (rc == 0) { continue; }
            
            /* Accept connection */
            insock = accept(sock, &inaddr, &inaddr_len);

Mark

0 项奖励
回复