NIO - problem med at lukke forbindelser
Jeg har en server der servicerer en hel del klienter. Når serveren beslutter at lukke forbindelsen til en klient køres følgende metode:public void disconnect(String reason) {
synchronized(closeLock) {
if (connected) {
connected = false;
try {
onClientDisconnect();
} catch (Exception e) {/* Ignore */}
try {
sendMessage(new ResponseMessage("ack", ResponseCodes.ACK_Quit));
processWrite(-1, -1);
} catch (Exception e) {/* Ignore */}
try {
channel().close();
} catch (Exception e) { e.printStackTrace(); }
try {
key.cancel();
} catch (Exception e) { e.printStackTrace(); }
Log.echoDebug("shared.net.Client: Releasing client("+getClientID()+"): "+reason);
}
}
}
Jeg kan forsikre at close() kaldes på channel (SocketChannel-instance), og at linien 'shared.net.Client: Releasing client...' udskrives hver eneste gang, MEN forbindelsen lukkes ikke. Det er ikke muligt at sende flere data gennem forbindelsen, men i OS (linux Debian), kan det ses at antallet af forbindelser i tilstanden CLOSE_WAIT vokser og efter omkring 24 timer tillades ikke flere forbindelse og serveren skal genstartes.
Nogen der ved hvad der går galt og hvordan jeg får lukket forbindelserne korrekt? Jeg har prøvet channel.socket().close(), men det ændrer absolut intet.
