You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mina.apache.org by "Jonathan Valliere (JIRA)" <ji...@apache.org> on 2019/05/24 14:46:00 UTC
[jira] [Resolved] (DIRMINA-901) connect() a nonblocking
unregistered channel fails with UDT
[ https://issues.apache.org/jira/browse/DIRMINA-901?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jonathan Valliere resolved DIRMINA-901.
---------------------------------------
Resolution: Abandoned
Unsupported functionality. UDT is not supported or maintained by MINA
> connect() a nonblocking unregistered channel fails with UDT
> -----------------------------------------------------------
>
> Key: DIRMINA-901
> URL: https://issues.apache.org/jira/browse/DIRMINA-901
> Project: MINA
> Issue Type: Bug
> Components: Core
> Affects Versions: 2.0.4
> Environment: Linux 2.6.18-164.11.1.el5xen #1 SMP Wed Jan 20 08:06:04 EST 2010 x86_64 x86_64 x86_64 GNU/Linux
> java version "1.6.0_31"
> Java(TM) SE Runtime Environment (build 1.6.0_31-b04)
> Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01, mixed mode)
> Reporter: Florin Sultan
> Priority: Major
> Fix For: 2.0.14
>
> Attachments: ChannelSocketUDT.java, ChannelSocketUDT.java, NioUDTSocketConnector.java, NioUDTSocketConnector.java
>
>
> Context:
> -------
> I am using BarchartUDT as transport, which I have integrated with MINA 2.0.4.
> BarchartUDT is a java wrapper to a native UDT library (C++). UDT is a reliable,
> connection-oriented, streaming protocol.
> The example below is the MINA sample sumup client iprogram that breaks
> with an exception during the connect() call into the UDT wrapper.
> Description:
> -----------
> Trigger :
> 1. MINA creates a (non-blocking, by default) UDT channel.
> 2. Calls connect() on it BEFORE registering it with a selector.
> 3. My UDT library does not accept a connect with a nonblocking channel and throws an exception.
> Just for reference, here's the exception in UDT - the message is quite clear :
> Jul 3, 2012 11:22:30 AM com.barchart.udt.nio.ChannelSocketUDT connect
> SEVERE: UDT channel is in non blocking mode;must register with a selector before trying to connect()
> Of course, the above sequence of actions does work with the native TCP channels.
> The problem is that UDT does not accept a connect on a nonblocking AND unregistered channel.
> I am perfectly aware that this is most likely an issue with UDT, and not a bug in MINA.
> However, I would greatly appreciate it if you can provide any suggestions or help.
> Questions :
> 1. What would it take to have MINA perform these actions in reverse (first register, then connect) ?
> Is there an easy change to AbstractPollingIoConnector.connect0 that would do the register before connect,
> for example?
> 2. If this is not possible, is there a way to make the channel blocking, for example?
> 3. Is there other way around it?
> I'd be happy to try any suggestion (or piece of code, if you provide it).
> It would help me get over this hurdle until UDT people give a reply to this issue.
> Details:
> -------
> -- Call stack:
> Jul 13, 2012 1:10:03 PM com.barchart.udt.nio.ChannelSocketUDT connect
> SEVERE: UDT channel is in non blocking mode;must register with a selector before trying to connect()
> Exception in thread "main" java.nio.channels.IllegalBlockingModeException
> at com.barchart.udt.nio.ChannelSocketUDT.connect(ChannelSocketUDT.java:176)
> at org.apache.mina.transport.socket.nio.NioUDTSocketConnector.connect(NioUDTSocketConnector.java:215)
> at org.apache.mina.transport.socket.nio.NioUDTSocketConnector.connect(NioUDTSocketConnector.java:66)
> at org.apache.mina.core.polling.AbstractPollingIoConnector.connect0(AbstractPollingIoConnector.java:320)
> at org.apache.mina.core.service.AbstractIoConnector.connect(AbstractIoConnector.java:262)
> at org.apache.mina.core.service.AbstractIoConnector.connect(AbstractIoConnector.java:172)
> -- Code in question :
> {code}
> AbstractPollingIoConnector.connect0 :
> creates Connector thread AFTER connect call on the non-blocking channel
> AbstractPollingIoConnector.Connector.run() :
> calls registerNew() :
> private class Connector implements Runnable {
> public Connector() {
> System.out.println("Connector::CTOR " + selectable);
> }
> public void run() {
> assert (connectorRef.get() == this);
> int nHandles = 0;
> while (selectable) {
> try {
> // the timeout for select shall be smaller of the connect
> // timeout or 1 second...
> int timeout = (int)Math.min(getConnectTimeoutMillis(), 1000L);
> int selected = select(timeout);
> nHandles += registerNew();
> {code}
> Thanks !
> Florin
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)