You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mina.apache.org by gui <ja...@hotmail.com> on 2007/08/24 23:24:07 UTC

DatagramConnector without connected UDP channel ?

Hi, 

I have noticed that the datagram connector always creates a connected UDP
channel. 
I'm trying to create a MINA client that talks to TFTP server, but this
server switches UDP ports. 
For instance, i'm sending a packet to the server on port 69, and the server
replies to me from a different port. This behaviour is normal in the TFTP
protocol. 
However, since MINA always uses connected UDP channels, I never recieve the
response from the server. The packets don't get through the connected
channel, since that one requires that all packets from the server come from
the same port. 

Is there any way around this ? 
I have been looking in the MINA code but don't see a straightforward way to
'disconnect' the client UDP channel. 

Thanks. 
-- 
View this message in context: http://www.nabble.com/DatagramConnector-without-connected-UDP-channel---tf4325860s16868.html#a12320065
Sent from the Apache MINA Support Forum mailing list archive at Nabble.com.


Re: DatagramConnector without connected UDP channel ?

Posted by Adam Fisk <a...@lastbamboo.org>.
One approach is to use an acceptor to listen on the *same local port* as the
connector and to set the setReuseAddress option on both the connector and
the acceptor.  SetReuseAddress basically means "set reuse local address", so
binding to the same local address multiple times doesn't create an error.

With this setup, the connector will receive all data from the address and
port it originally connected to, while the acceptor will receive all other
data (both from the server and anywhere else).

I've tested the above behavior thoroughly, and that's how it consistently
works.  The "connect" call basically tells the kernel "give me everything
from this address and port" while a straight acceptor can still receive
everything else from that same server with setReuseAddress.

Maybe not ideal, but "connect()" is pretty useful to limit traffic to only
that client and port.

Also, I'm not familiar with the TFTP port selection, but you could also use
a second connector if the second port is consistent.

The key to all of this is for the connector/acceptor or connector/connector
combo to share the same data classes underneath.

Hope that helps.

-Adam


On 8/24/07, gui <ja...@hotmail.com> wrote:
>
>
> Hi,
>
> I have noticed that the datagram connector always creates a connected UDP
> channel.
> I'm trying to create a MINA client that talks to TFTP server, but this
> server switches UDP ports.
> For instance, i'm sending a packet to the server on port 69, and the
> server
> replies to me from a different port. This behaviour is normal in the TFTP
> protocol.
> However, since MINA always uses connected UDP channels, I never recieve
> the
> response from the server. The packets don't get through the connected
> channel, since that one requires that all packets from the server come
> from
> the same port.
>
> Is there any way around this ?
> I have been looking in the MINA code but don't see a straightforward way
> to
> 'disconnect' the client UDP channel.
>
> Thanks.
> --
> View this message in context:
> http://www.nabble.com/DatagramConnector-without-connected-UDP-channel---tf4325860s16868.html#a12320065
> Sent from the Apache MINA Support Forum mailing list archive at Nabble.com
> .
>
>