2012-01-15 3 views
3

채널을 닫으려고 할 때 ChannelClosedException이 throw되는 이유는 무엇입니까? Channel.close(), 예외의 스택 트레이스와 닫기 : 당신은 그냥 무시해야Netty : ClosedChannelException 채널을 닫을 때

java.nio.channels.ClosedChannelException 
    at org.jboss.netty.channel.socket.nio.NioWorker.cleanUpWriteBuffer(NioWorker.java:645) 
    at org.jboss.netty.channel.socket.nio.NioWorker.close(NioWorker.java:601) 
    at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink.handleAcceptedSocket(NioServerSocketPipelineSink.java:119) 
    at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink.eventSunk(NioServerSocketPipelineSink.java:76) 
    at org.jboss.netty.handler.codec.oneone.OneToOneEncoder.handleDownstream(OneToOneEncoder.java:60) 
    at org.jboss.netty.channel.Channels.close(Channels.java:720) 
    at org.jboss.netty.channel.AbstractChannel.close(AbstractChannel.java:200) 
    at ru.greencubes.player.PlayerWorkerThread.closeConnection(PlayerWorkerThread.java:107) 
    at ru.greencubes.player.PlayerWorkerThread.shutDown(PlayerWorkerThread.java:282) 
    at ru.greencubes.player.NetworkPlayerThread.disconnect(NetworkPlayerThread.java:1289) 
    at ru.greencubes.player.NetworkPlayerThread.disconnect(NetworkPlayerThread.java:1272) 
    at ru.greencubes.server.Server.run(Server.java:1590) 
    at ru.greencubes.server.ServerThread.run(ServerThread.java:12) 

답변

3

나는 생각한다. 채널에 남은 바이트를 쓰려고 할 때 채널이 이미 닫혔다 고했습니다. 그래서 걱정할 것은 없습니다.

+0

같은 문제가 있습니다. 남은 바이트가 닫히기 전에 채널에 쓰여지는 확실한 방법이 있습니까? 나는'ch.write (msg); ch.close();' – Dennis

+0

예 ... ChannelFuture를 사용하십시오. ch.write (msg) .addListener (ChannelFuture.CLOSE); –

+0

CLOSE는 ChannelFuture에 존재하지 않습니다. – Dennis

관련 문제