newbie - howto properly handle connect failures
lists at joerg-buchberger.de
lists at joerg-buchberger.de
Fri Apr 23 14:24:54 EDT 2010
Vijay,
thanks for the response.
The timeout is a good idea anyway - I will change it.
However, the methods return almost immediately - so, a timeout won't help with
the basic problem, I'm afraid.
Cheers.
Joerg
Vijay K Pandey <VPandey at mdes.ms.gov> hat am 23. April 2010 um 16:22 geschrieben:
> May be you should not wait Indefinitely on the client connect - have some time
> parameter - for eg 60 secs or so
>
> future.awaitUninterruptibly(60, TimeUnit.SECONDS);
>
> if (!future.isSuccess()) {
> bootstrap.releaseExternalResources();
> throw future.getCause();
> }
>
> I myself starting looking into Netty from yesterday - so I might be totally
> wrong :)
>
> Cheers
> Vijay
> -----Original Message-----
> From: netty-users-bounces at lists.jboss.org
> [mailto:netty-users-bounces at lists.jboss.org] On Behalf Of
> lists at joerg-buchberger.de
> Sent: Friday, April 23, 2010 6:46 AM
> To: netty-users at lists.jboss.org
> Subject: newbie - howto properly handle connect failures
>
> Hi.
>
> I've setup a simple TCP client.
> At present, I'm not sure how to properly detect and deal with connect
> failures.
> So, I setup a test case, where the client tries to connect to a non-existing
> host ...
> in the meantime I got the impression, that I have some basic misconceptions
> about proper netty usage in general.
>
> When doing myClientBootstrap.connect(), I somewhat naively assumed, that for
> my
> testcase either the connect()-method would throw an exception or the returned
> ChannelFuture would return false on isSuccess() ... however, neither was the
> case.
>
> That part of my code looks like this:
>
> ChannelFuture future = bootstrap.connect(new InetSocketAddress(address,
> port));
> channel = future.awaitUninterruptibly().getChannel();
> if (!future.isSuccess()) {
> bootstrap.releaseExternalResources();
> throw future.getCause();
> }
>
> The pipeline of the ClientBootstrap (of the simple tcp client used in my
> testcase) contains one simple handler (which is an inner class to the simple
> client) ...
>
> @ChannelPipelineCoverage("one")
> private class FirstClientHandler extends SimpleChannelUpstreamHandler {
> private final ChannelBuffer firstMessage; public
> FirstClientHandler(final int CONNECT_CAPACITY) {
> firstMessage = ChannelBuffers.buffer(CONNECT_CAPACITY);
> for (int capacityCount = 0; capacityCount < CONNECT_CAPACITY;
> capacityCount++) {
> // refactor here or offer new constructor, if support for a
> server demanding a connect magic is needed
> firstMessage.writeByte((byte) 0x00);
> }
> }
>
> @Override
> public void channelConnected(ChannelHandlerContext ctx,
> ChannelStateEvent e) {
> e.getChannel().write(firstMessage);
> }
>
> @Override
> public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)
>{
> boolean offered = messageQueue.offer((ChannelBuffer)
> e.getMessage());
> assert offered;
> if (SimpleTcpClient.this.countdownLatch !=
> null) SimpleTcpClient.this.countdownLatch.countDown();
> }
>
> @Override
> public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent
> e) throws Exception {
> e.getFuture().setFailure(e.getCause());
> e.getChannel().close();
> throw (Exception) e.getCause();
> }
> } // END inner class FirstClientHandler
>
> Now, if I connect to an existing host, everything is fine, in the sense that
> messages are exchanged.
> But for my testcase with a non-existing host ... I only sometimes get the
> exceptionCaught()-method of my simple handler called - though, only if I'm
> stepping through with the debugger. If I just execute it, however - it is not
> invoked. So, I get no indication that the connection did not happen. And it
> surely cannot be established, since the host does not exist. I'm somewhat
> lost.
>
> Thanks for reading up to here. ;-)
> Cheers
> Joerg
>
>
>
>
> _______________________________________________
> netty-users mailing list
> netty-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/netty-users
> _______________________________________________
> netty-users mailing list
> netty-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/netty-users
More information about the netty-users
mailing list