套接字无法检测断开连接

时间:2014-11-27 10:05:21

标签: linux sockets tcp wifi recv

我编写了一个服务器代码,通过wifi接受客户端的连接。 wifi套接字在Wifi Dongle上打开,显示为ttyAMA0。

我创建了一个套接字

serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(PORT);

然后我做通常的接受......

while(1)
        {
                new_fd = accept(sfd,(struct sockaddr*)&client_addr,&len);
               ...
        ...
        }

在我的一个读者主题中我正在这样做:

void* Command2Buff(void *args)
{
 ...
        while(1)
        {
                 ....
                clientBytes = recv(str_fd.new_conn_fd,&temp,1);
                if(clientBytes == 0 || clientBytes == -1)
                {
                   ...
                }
                globalCmdbuf[wr] = temp;
               
        }
}

因此,recv应该检测到远程连接已关闭。当我从Android手机关闭wifi时,嵌入式计算机上的代码就会挂起。

我打开手机上的wifi,我可以连接到套接字,但没有数据传输。

  1. 我尝试阅读而不是recv,但没有任何区别。
  2. 我也尝试过TCPALIVE选项..但仍无效。
  3. 我应该删除INADDR_ANY并专门为wlan编写....在这种情况下应该写什么
  4. serv_addr.sin_addr.s_addr = WLAN;

1 个答案:

答案 0 :(得分:1)

根据EJP的建议,我使用SO_RCVTIMEO关闭了我身边的连接。