初めて Jetty 9 EndPoint を使用しています。
しかし、EndPoint.flush(ByteBuffer)メソッドの returncode の使用方法に行き詰まっています。
呼び出しが成功するまで無期限にループする必要がありますか?
Javadocはただ言う
戻り値: True IFF すべてのバッファが消費され、エンドポイントがデータを宛先にフラッシュした (つまり、データをバッファリングしていない)。
ところで、私が呼び出しているインスタンスのタイプはSslConnection$DecryptedEndPointです
SocketEndpoint が推奨されず、SelectChannelEndpoint が優先される理由に関するドキュメントが見つからないため、洞察をいただければ幸いです。
少し話題から外れますが、とにかく; 驚いたことに、NetworkTrafficSelectChannelEndPointでこれを見つけました:
操作 |= が &= の代わりに使用されます (jetty-all-9.0.3.v20130506-sources.jar にあります)。
@Override
public boolean flush(ByteBuffer... buffers) throws IOException
{
boolean flushed=true;
for (ByteBuffer b : buffers)
{
if (b.hasRemaining())
{
int position = b.position();
flushed|=super.flush(b); // <<-- shouldn't it be &=
int l=b.position()-position;
notifyOutgoing(b, position, l);
if (!flushed)
break;
}
}
return flushed;
}