我只是写了一个TCP服务器,它在大多数情况下都能正常工作。
但是,如果我手动杀死它并立即重新启动它,则TCP客户端有时无法连接到它。
然后,如果我杀死它并重新启动它,那就可以了。
我真的很想知道为什么,我曾经尝试修改/proc/sys/net/ipv4/tcp_tw_recycle
和/proc/sys/net/ipv4/tcp_tw_reuse
。但这没有用。
最佳答案
实际上,这与套接字被设置为可重用的方式有关。
尝试以这种方式初始化套接字:
int reuse_addr = 1;
int listener_socket = 0;
listener_socket = socket(AF_INET, SOCK_STREAM, 0); //get socket handle
if (listener_socket < 0)
{
//Handle error
}
//Set the socket reusable
setsockopt(listener_socket, SOL_SOCKET, SO_REUSEADDR, &reuse_addr, sizeof(int));
变量
reuse_addr
是1
,用于标识我们要启用特定选项(0
将禁用)。SOL_SOCKET
关键字表示您要设置套接字级别设置/选项,它将独立于协议。我们设置了SO_REUSEADDR
,您可以在此处了解更多信息:http://www.unixguide.net/network/socketfaq/4.5.shtml其他可用设置,您可以从此处检查:http://www.delorie.com/gnu/docs/glibc/libc_352.html
关于c - 为什么TCP客户端重新启动后,TCP客户端有时无法连接到TCP服务器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26354826/