繁体   English   中英

套接字无法检测到断开连接

[英]Socket unable to detect disconnect

我已经编写了一个服务器代码,该代码接受通过客户端通过wifi的连接。 wifi插座在显示为ttyAMA0的Wifi加密狗上打开。

我创建一个套接字

 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写吗....在那种情况下我应该写什么

 serv_addr.sin_addr.s_addr = WLAN; 

根据EJP的建议,我使用SO_RCVTIMEO从我这一侧关闭了连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM