2016-03-21 5 views
0

、同じインターフェイス/アドレス/ポートにバインド新しいsocket() L2、listen() sおよびaccept()の新しい接続を作成します以前のリスニングソケットL1から受け入れられたソケットは、L1が閉じられていないかのように正しく動作しますか?または、このようにしてソケットL2を作成して起動することは、最初は不可能ですか?参考にしてください。リスニングソケットを再起動すると、受け入れられた接続にどのような影響がありますか? POSIX、<code>socket()</code> L1をINGの<code>listen()</code>にプロセス<code>accept()</code>の接続、およびその後<code>close()</code> S L1によれば

例:

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

関連する問題