2016-03-21 13 views
0

bir sürecin accept() s aynı arayüzü/adresi/bağlantı noktasında bağlanmış socket() L1, ve daha sonra close() s L1 ve yeni socket() L2 oluşturur ing listen() bağlantıların, listen() S ve accept() yeni bağlantılar, will Bir önceki dinleme soketinden (L1) kabul edilen soketler, L1 kapatılmamış gibi çalışır mı? Ya da bu şekilde L2 soketini oluşturup başlatmak ilk etapta imkansız mıdır? Lütfen bir referans verin.Dinleme soketini yeniden başlatmak, kabul edilen bağlantılarda ne gibi etkileri var? POSIX'e göre

Örnek:

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

Kendi noktanızı göstermek için bir kod eklemeniz gerekiyor. Ne istediğini anlamadım. – SergeyA

+0

@SergeyA Şimdi eklediğim örnek nasıl olur? – jotik

cevap

1

rağmen socket() yanlış kullanımı - beklendiği gibi kod çalışacaktır - İlk bağımsız değişken bir adres famility değil, bir protokol ailesi ve dolayısıyla AF_INET olmalıdır.

accept() bir kez yeni bir soket döndürdüğünde, dinleme soketinden tamamen bağımsızdır ve bundan etkilenmez.

+0

'socket()' argümanı düzeltildi. – jotik

+0

Aynı bağlama ile oluşturulan yeni bir dinleme soketinden de bağımsız mı? Örneğin. Hem eski hem de yeni soketler tüm arayüzlerde 0.0.0.0 üzerinde TCP portuna 12345 bağlanırsa? – jotik

+1

@jotik, farketmez. Şimdi kendi soketidir. – SergeyA

İlgili konular