根据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?
答案 0 :(得分:1)
尽管socket()
的使用不正确 - 第一个参数应该是地址famility,而不是协议族,因此AF_INET - 代码将按预期工作。
一旦accept()
返回一个新套接字,它就完全独立于侦听套接字,并且不受它的影响。