重新启动侦听套接字对接受的连接有什么影响?

What effects does restarting a listening socket have on accepted connections?

根据 POSIX,当进程 accept()s 连接在 listen()ing socket() L1 上,然后 close()s L1,并创建新的 socket() L2 绑定在相同的 interface/address/port、listen()s 和 accept()s 新连接上,从先前的侦听套接字 L1 接受的套接字是否会像 L1 一样正常运行没有被关闭?还是一开始就不可能以这种方式创建和启动套接字 L2?请提供参考。

示例:

int server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
bind(server, &someAddress, sizeof(someAddress)))
listen(server, 0);
int conn_1 = accept(server, NULL, NULL);
/* ... */
int conn_n = accept(server, NULL, NULL);

/* RESTART LISTENING SOCKET: */
close(server);
server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
bind(server, &someAddress, sizeof(someAddress)))
listen(server, 0);
int newconn_1 = accept(server, NULL, NULL);
/* ... */
int newconn_n = accept(server, NULL, NULL);

/* Will connections conn_1...conn_n still properly operate at this point?

尽管 socket() 的用法不正确 - 第一个参数应该是地址族,而不是协议族,因此 AF_INET - 代码将按预期工作。

一旦accept() returns一个新的套接字,就完全独立于监听套接字,不受其影响