如果客户端处于非活动状态(例如大约120秒),我有一个关闭服务器连接的方案。它的目的是我可以在一定时间不活动后重用fd。所以我写了一个代码来关闭文件描述符使用
if ((int)time(NULL) - (int)value_data->timeout > 120)
{
zlog_warn(_c,"timeout of 120s for device = %s",key);
close(value_data->fd);
g_hash_table_iter_remove (&iter);
(*_collector_free_tcp_cache_cb)(value_data->device_ip, value_data->fd);
AFREE(value_data->device_ip);
AFREE(value_data);
}
使用close(fd),在服务器端关闭连接fd。我面临的问题是在下次连接客户端之后,服务器崩溃了。客户端无法发送数据。在查看tcp客户端时,它会提供Tcp所在的信息
TCP 192.168.2.138:50296->192.168.2.161:shell (CLOSE_WAIT)
如何再次发送下一个客户端的数据?是否有一些时间我需要等待,以便可以重复使用相同的fd来发送数据。?