2016-03-21 86 views
0

根據POSIX,當一個進程accept() S於一個listen()荷蘭國際集團socket() L1,事後close()小號L1,並創建新的socket() L2結合的相同的接口/地址/端口上的連接,listen() S和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

您需要添加一些代碼來說明您的觀點。我無法理解你在問什麼。 – SergeyA

+0

@SergeyA我現在添加的示例如何? – jotik

回答

1

socket()的不正確使用盡管 - 第一個參數應該是一個地址famility,而不是一個協議族,因此AF_INET - 如預期的代碼將工作。

一旦accept()返回一個新的套接字,它完全獨立於偵聽套接字,並且不受它的影響。

+0

修復了'socket()'參數。 – jotik

+0

它是否獨立於使用相同綁定創建的新偵聽套接字?例如。如果舊套接字和新套接字都綁定到所有接口上的0.0.0.0上的TCP端口12345? – jotik

+1

@jotik,沒關係。它現在是它自己的套接字。 – SergeyA

相關問題