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

时间:2016-03-21 14:50:30

标签: sockets posix

根据POSIX,当流程accept()listen() socket() L1 {以后close()的L1上建立连接时,会创建新的socket() L2绑定在同一接口/地址/端口,listen()accept()的新连接上,从前一个侦听套接字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?

1 个答案:

答案 0 :(得分:1)

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

一旦accept()返回一个新套接字,它就完全独立于侦听套接字,并且不受它的影响。