我编写了一个服务器代码,通过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,我可以连接到套接字,但没有数据传输。
serv_addr.sin_addr.s_addr = WLAN;
答案 0 :(得分:1)
根据EJP的建议,我使用SO_RCVTIMEO关闭了我身边的连接。