gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:51:53 25 4
gpt4 key购买 nike

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

我创建一个套接字

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,我可以连接到 socket ,但没有数据传输。

  1. 我尝试使用 read 而不是 recv,但没有任何区别。
  2. 我也试过 TCPALIVE 选项..还是不行。
  3. 我应该删除 INADDR_ANY 并专门为 wlan 编写....在那种情况下我应该写什么

serv_addr.sin_addr.s_addr = WLAN;

最佳答案

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

关于linux - 套接字无法检测到断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27167870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com