- PR -

ServerSocketのキューについて

1
投稿者投稿内容
84
ベテラン
会議室デビュー日: 2005/11/04
投稿数: 83
投稿日時: 2008-10-01 22:26
いつもお世話になっております。

ServerSocketのキューに溜まった
Socketについて質問があって投稿しました。

1)ServerSocket#accept()を実行すると
ServerSocketのキューに溜まったSocketが取得できる。
2)キューのサイズは以下のコンストラクタで設定できる。
ServerSocket(int port, int backlog)

上記がjavaの仕様と理解しています。
上記内容を前提として、

キューに溜まったSocketはアクセス順に整列していて、
acceptをコールすることで、
キューに溜まったSocketのうち、
一番最初にアクセスしたSocketが取得できる。

つまり、アクセスしてきた順番にSocketが取得できる、
と思っているのですが、
この認識は間違っていますでしょうか。

どなたか詳しい方いらっしゃいましたら教えてください。
よろしくお願いします。
ranco
大ベテラン
会議室デビュー日: 2007/11/02
投稿数: 112
投稿日時: 2008-10-02 08:51
> つまり、アクセスしてきた順番にSocketが取得できる、
> と思っているのですが、
> この認識は間違っていますでしょうか。
キューというデータ構造は、特別の仕様(たとえばプライオリティ順)がないかぎり、その標準の動作をすると考えるべきでしょう。

なお、ServerSocketのキューではなく、低レベルTCPの接続キューです。accept()はそこから接続を取り出してJavaのSocketオブジェクトを作ります。
84
ベテラン
会議室デビュー日: 2005/11/04
投稿数: 83
投稿日時: 2008-10-03 15:11
rancoさん

ありがとうございます。
内容、理解しました。

いろいろと試してみたのですが、
accept()で取得できるSocketはTCP接続を受けた順番にならないようです。

特にSocketFactoryを作成しているわけではないので、
内部では、PlainSocketImplを使っていることになります。

低レベルTCPの接続キューということなので、
accept()で取得できる順番は、nativeの仕様次第なのでしょうね。
1

スキルアップ/キャリアアップ(JOB@IT)