dev@grizzly.java.net

Re: FW: help: server socket close/timeout

From: Jeanfrancois Arcand <Jeanfrancois.Arcand_at_Sun.COM>
Date: Fri, 14 Sep 2007 13:53:14 -0400

Hi James,

yes this is the default behavior. If you want to customize the behavior,
just add:

> DefaultSelectionKeyHandler keyHandler =
> new DefaultSelectionKeyHandler(){
> public void expire(Iterator<SelectionKey> keys){
> } // The connections are never going to be closed
> };

and then set the keyHandler to your TCPSelectorHandler.

Thanks

-- Jeanfrancois

James L. Gustafson wrote:
>
>
> We’re using Grizzly: v1.5.1, JDK 1.5.0_08 and it appears that the server
> is closing the socket connection after @30seconds.
>
>
>
> Code:
>
> public class GrizzlyInputChannel implements IInputChannel {
>
>
>
> private Integer port = 7556;
>
>
>
> private LinkedBlockingQueue<InputMessage> queue;
>
>
>
> private Controller controller = new Controller();
>
> private TCPSelectorHandler tcpHandler = new TCPSelectorHandler();
>
> private IProtocolChainInstanceHandler chainHandler = new
> ProtocolChainHandler(queue);
>
>
>
> public void setPort(Integer port) {
>
> this.port = port;
>
> }
>
>
>
> public void
> setProcessingQueue(LinkedBlockingQueue<InputMessage> queue) {
>
> this.queue = queue;
>
> }
>
>
>
> public void setController(Controller controller) {
>
> this.controller = controller;
>
> }
>
>
>
> public void setTCPSelectorHandler(TCPSelectorHandler
> tcpHandler) {
>
> this.tcpHandler = tcpHandler;
>
> }
>
>
>
> public void
> setProtocolChainInstanceHandler(IProtocolChainInstanceHandler
> chainHandler) {
>
> this.chainHandler = chainHandler;
>
> }
>
>
>
> public void start() {
>
> chainHandler.setQueue(queue);
>
> tcpHandler.setPort(port);
>
> controller.setProtocolChainInstanceHandler(chainHandler);
>
> controller.addSelectorHandler(tcpHandler);
>
> try {
>
> controller.start();
>
> } catch (IOException e) {
>
> e.printStackTrace();
>
> }
>
> }
>
>
>
> public void stop() {
>
> try {
>
> controller.stop();
>
> } catch (IOException e) {
>
> e.printStackTrace();
>
> }
>
> }
>
>
>
>
>
>
>
>
>
> On the client side we get:
>
> java.net.SocketException: Software caused connection abort: socket write
> error
>
> at java.net.SocketOutputStream.socketWrite0(Native Method)
>
> at
> java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
>
> at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
>
> at
> java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
>
> at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
>
> at
> sun.nio.cs.StreamEncoder$CharsetSE.implFlush(StreamEncoder.java:410)
>
> at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:152)
>
> at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:213)
>
> at java.util.logging.StreamHandler.flush(StreamHandler.java:225)
>
> at java.util.logging.SocketHandler.publish(SocketHandler.java:172)
>
> at java.util.logging.Logger.log(Logger.java:452)
>
> at java.util.logging.Logger.doLog(Logger.java:474)
>
> at java.util.logging.Logger.log(Logger.java:497)
>
> at java.util.logging.Logger.info(Logger.java:1016)
>
> at
> com.gestalt.nettoolkit.network.listener.ProtocolFilter.filterPacket(ProtocolFilter.java:62)
>
> at
> com.gestalt.nettoolkit.network.listener.NetworkListener.processData(NetworkListener.java:83)
>
> at
> com.gestalt.nettoolkit.network.listener.NetworkListener.main(NetworkListener.java:26)
>
>
>
>
>
>
>
> We’ve tried tcpHandler.setServerTimeout(0) and
> tcpHandler.setSocketTimeout(0) but it continued to close/timeout.
>
>
>
> Any help/suggestions would be greatly appreciated. In the mean time
> we’re going to try to use Grizzly 1.6.0 to see if we have any better luck
>
>
>
>
>
> Thanks
>
> Jim
>