我只是写了一个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_addr1,用于标识我们要启用特定选项(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/

10-13 06:21