<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
<span class="sourceLineNo">002</span> *  Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
<span class="sourceLineNo">003</span> *  or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
<span class="sourceLineNo">004</span> *  distributed with this work for additional information<a name="line.4"></a>
<span class="sourceLineNo">005</span> *  regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
<span class="sourceLineNo">006</span> *  to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
<span class="sourceLineNo">007</span> *  "License"); you may not use this file except in compliance<a name="line.7"></a>
<span class="sourceLineNo">008</span> *  with the License.  You may obtain a copy of the License at<a name="line.8"></a>
<span class="sourceLineNo">009</span> *<a name="line.9"></a>
<span class="sourceLineNo">010</span> *    http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
<span class="sourceLineNo">011</span> *<a name="line.11"></a>
<span class="sourceLineNo">012</span> *  Unless required by applicable law or agreed to in writing,<a name="line.12"></a>
<span class="sourceLineNo">013</span> *  software distributed under the License is distributed on an<a name="line.13"></a>
<span class="sourceLineNo">014</span> *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.14"></a>
<span class="sourceLineNo">015</span> *  KIND, either express or implied.  See the License for the<a name="line.15"></a>
<span class="sourceLineNo">016</span> *  specific language governing permissions and limitations<a name="line.16"></a>
<span class="sourceLineNo">017</span> *  under the License.<a name="line.17"></a>
<span class="sourceLineNo">018</span> *<a name="line.18"></a>
<span class="sourceLineNo">019</span> */<a name="line.19"></a>
<span class="sourceLineNo">020</span>package org.apache.mina.core.polling;<a name="line.20"></a>
<span class="sourceLineNo">021</span><a name="line.21"></a>
<span class="sourceLineNo">022</span>import java.net.ConnectException;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import java.net.SocketAddress;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import java.nio.channels.ClosedSelectorException;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import java.util.Iterator;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import java.util.Queue;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import java.util.concurrent.ConcurrentLinkedQueue;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import java.util.concurrent.Executor;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.util.concurrent.Executors;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.30"></a>
<span class="sourceLineNo">031</span><a name="line.31"></a>
<span class="sourceLineNo">032</span>import org.apache.mina.core.RuntimeIoException;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import org.apache.mina.core.filterchain.IoFilter;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import org.apache.mina.core.future.ConnectFuture;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import org.apache.mina.core.future.DefaultConnectFuture;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import org.apache.mina.core.service.AbstractIoConnector;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import org.apache.mina.core.service.AbstractIoService;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import org.apache.mina.core.service.IoConnector;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import org.apache.mina.core.service.IoHandler;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import org.apache.mina.core.service.IoProcessor;<a name="line.40"></a>
<span class="sourceLineNo">041</span>import org.apache.mina.core.service.SimpleIoProcessorPool;<a name="line.41"></a>
<span class="sourceLineNo">042</span>import org.apache.mina.core.session.AbstractIoSession;<a name="line.42"></a>
<span class="sourceLineNo">043</span>import org.apache.mina.core.session.IoSession;<a name="line.43"></a>
<span class="sourceLineNo">044</span>import org.apache.mina.core.session.IoSessionConfig;<a name="line.44"></a>
<span class="sourceLineNo">045</span>import org.apache.mina.core.session.IoSessionInitializer;<a name="line.45"></a>
<span class="sourceLineNo">046</span>import org.apache.mina.transport.socket.nio.NioSocketConnector;<a name="line.46"></a>
<span class="sourceLineNo">047</span>import org.apache.mina.util.ExceptionMonitor;<a name="line.47"></a>
<span class="sourceLineNo">048</span><a name="line.48"></a>
<span class="sourceLineNo">049</span>/**<a name="line.49"></a>
<span class="sourceLineNo">050</span> * A base class for implementing client transport using a polling strategy. The<a name="line.50"></a>
<span class="sourceLineNo">051</span> * underlying sockets will be checked in an active loop and woke up when an<a name="line.51"></a>
<span class="sourceLineNo">052</span> * socket needed to be processed. This class handle the logic behind binding,<a name="line.52"></a>
<span class="sourceLineNo">053</span> * connecting and disposing the client sockets. A {@link Executor} will be used<a name="line.53"></a>
<span class="sourceLineNo">054</span> * for running client connection, and an {@link AbstractPollingIoProcessor} will<a name="line.54"></a>
<span class="sourceLineNo">055</span> * be used for processing connected client I/O operations like reading, writing<a name="line.55"></a>
<span class="sourceLineNo">056</span> * and closing.<a name="line.56"></a>
<span class="sourceLineNo">057</span> * <a name="line.57"></a>
<span class="sourceLineNo">058</span> * All the low level methods for binding, connecting, closing need to be<a name="line.58"></a>
<span class="sourceLineNo">059</span> * provided by the subclassing implementation.<a name="line.59"></a>
<span class="sourceLineNo">060</span> * <a name="line.60"></a>
<span class="sourceLineNo">061</span> * @see NioSocketConnector for a example of implementation<a name="line.61"></a>
<span class="sourceLineNo">062</span> * <a name="line.62"></a>
<span class="sourceLineNo">063</span> * @author &lt;a href="http://mina.apache.org"&gt;Apache MINA Project&lt;/a&gt;<a name="line.63"></a>
<span class="sourceLineNo">064</span> */<a name="line.64"></a>
<span class="sourceLineNo">065</span>public abstract class AbstractPollingIoConnector&lt;T extends AbstractIoSession, H&gt; extends AbstractIoConnector {<a name="line.65"></a>
<span class="sourceLineNo">066</span><a name="line.66"></a>
<span class="sourceLineNo">067</span>    private final Queue&lt;ConnectionRequest&gt; connectQueue = new ConcurrentLinkedQueue&lt;ConnectionRequest&gt;();<a name="line.67"></a>
<span class="sourceLineNo">068</span><a name="line.68"></a>
<span class="sourceLineNo">069</span>    private final Queue&lt;ConnectionRequest&gt; cancelQueue = new ConcurrentLinkedQueue&lt;ConnectionRequest&gt;();<a name="line.69"></a>
<span class="sourceLineNo">070</span><a name="line.70"></a>
<span class="sourceLineNo">071</span>    private final IoProcessor&lt;T&gt; processor;<a name="line.71"></a>
<span class="sourceLineNo">072</span><a name="line.72"></a>
<span class="sourceLineNo">073</span>    private final boolean createdProcessor;<a name="line.73"></a>
<span class="sourceLineNo">074</span><a name="line.74"></a>
<span class="sourceLineNo">075</span>    private final ServiceOperationFuture disposalFuture = new ServiceOperationFuture();<a name="line.75"></a>
<span class="sourceLineNo">076</span><a name="line.76"></a>
<span class="sourceLineNo">077</span>    private volatile boolean selectable;<a name="line.77"></a>
<span class="sourceLineNo">078</span><a name="line.78"></a>
<span class="sourceLineNo">079</span>    /** The connector thread */<a name="line.79"></a>
<span class="sourceLineNo">080</span>    private final AtomicReference&lt;Connector&gt; connectorRef = new AtomicReference&lt;Connector&gt;();<a name="line.80"></a>
<span class="sourceLineNo">081</span><a name="line.81"></a>
<span class="sourceLineNo">082</span>    /**<a name="line.82"></a>
<span class="sourceLineNo">083</span>     * Constructor for {@link AbstractPollingIoConnector}. You need to provide a default<a name="line.83"></a>
<span class="sourceLineNo">084</span>     * session configuration, a class of {@link IoProcessor} which will be instantiated in a<a name="line.84"></a>
<span class="sourceLineNo">085</span>     * {@link SimpleIoProcessorPool} for better scaling in multiprocessor systems. The default<a name="line.85"></a>
<span class="sourceLineNo">086</span>     * pool size will be used.<a name="line.86"></a>
<span class="sourceLineNo">087</span>     * <a name="line.87"></a>
<span class="sourceLineNo">088</span>     * @see SimpleIoProcessorPool<a name="line.88"></a>
<span class="sourceLineNo">089</span>     * <a name="line.89"></a>
<span class="sourceLineNo">090</span>     * @param sessionConfig<a name="line.90"></a>
<span class="sourceLineNo">091</span>     *            the default configuration for the managed {@link IoSession}<a name="line.91"></a>
<span class="sourceLineNo">092</span>     * @param processorClass a {@link Class} of {@link IoProcessor} for the associated {@link IoSession}<a name="line.92"></a>
<span class="sourceLineNo">093</span>     *            type.<a name="line.93"></a>
<span class="sourceLineNo">094</span>     */<a name="line.94"></a>
<span class="sourceLineNo">095</span>    protected AbstractPollingIoConnector(IoSessionConfig sessionConfig, Class&lt;? extends IoProcessor&lt;T&gt;&gt; processorClass) {<a name="line.95"></a>
<span class="sourceLineNo">096</span>        this(sessionConfig, null, new SimpleIoProcessorPool&lt;T&gt;(processorClass), true);<a name="line.96"></a>
<span class="sourceLineNo">097</span>    }<a name="line.97"></a>
<span class="sourceLineNo">098</span><a name="line.98"></a>
<span class="sourceLineNo">099</span>    /**<a name="line.99"></a>
<span class="sourceLineNo">100</span>     * Constructor for {@link AbstractPollingIoConnector}. You need to provide a default<a name="line.100"></a>
<span class="sourceLineNo">101</span>     * session configuration, a class of {@link IoProcessor} which will be instantiated in a<a name="line.101"></a>
<span class="sourceLineNo">102</span>     * {@link SimpleIoProcessorPool} for using multiple thread for better scaling in multiprocessor<a name="line.102"></a>
<span class="sourceLineNo">103</span>     * systems.<a name="line.103"></a>
<span class="sourceLineNo">104</span>     * <a name="line.104"></a>
<span class="sourceLineNo">105</span>     * @see SimpleIoProcessorPool<a name="line.105"></a>
<span class="sourceLineNo">106</span>     * <a name="line.106"></a>
<span class="sourceLineNo">107</span>     * @param sessionConfig<a name="line.107"></a>
<span class="sourceLineNo">108</span>     *            the default configuration for the managed {@link IoSession}<a name="line.108"></a>
<span class="sourceLineNo">109</span>     * @param processorClass a {@link Class} of {@link IoProcessor} for the associated {@link IoSession}<a name="line.109"></a>
<span class="sourceLineNo">110</span>     *            type.<a name="line.110"></a>
<span class="sourceLineNo">111</span>     * @param processorCount the amount of processor to instantiate for the pool<a name="line.111"></a>
<span class="sourceLineNo">112</span>     */<a name="line.112"></a>
<span class="sourceLineNo">113</span>    protected AbstractPollingIoConnector(IoSessionConfig sessionConfig, Class&lt;? extends IoProcessor&lt;T&gt;&gt; processorClass,<a name="line.113"></a>
<span class="sourceLineNo">114</span>            int processorCount) {<a name="line.114"></a>
<span class="sourceLineNo">115</span>        this(sessionConfig, null, new SimpleIoProcessorPool&lt;T&gt;(processorClass, processorCount), true);<a name="line.115"></a>
<span class="sourceLineNo">116</span>    }<a name="line.116"></a>
<span class="sourceLineNo">117</span><a name="line.117"></a>
<span class="sourceLineNo">118</span>    /**<a name="line.118"></a>
<span class="sourceLineNo">119</span>     * Constructor for {@link AbstractPollingIoConnector}. You need to provide a<a name="line.119"></a>
<span class="sourceLineNo">120</span>     * default session configuration, a default {@link Executor} will be created<a name="line.120"></a>
<span class="sourceLineNo">121</span>     * using {@link Executors#newCachedThreadPool()}.<a name="line.121"></a>
<span class="sourceLineNo">122</span>     * <a name="line.122"></a>
<span class="sourceLineNo">123</span>     * @see AbstractIoService#AbstractIoService(IoSessionConfig, Executor)<a name="line.123"></a>
<span class="sourceLineNo">124</span>     * <a name="line.124"></a>
<span class="sourceLineNo">125</span>     * @param sessionConfig<a name="line.125"></a>
<span class="sourceLineNo">126</span>     *            the default configuration for the managed {@link IoSession}<a name="line.126"></a>
<span class="sourceLineNo">127</span>     * @param processor<a name="line.127"></a>
<span class="sourceLineNo">128</span>     *            the {@link IoProcessor} for processing the {@link IoSession}<a name="line.128"></a>
<span class="sourceLineNo">129</span>     *            of this transport, triggering events to the bound<a name="line.129"></a>
<span class="sourceLineNo">130</span>     *            {@link IoHandler} and processing the chains of<a name="line.130"></a>
<span class="sourceLineNo">131</span>     *            {@link IoFilter}<a name="line.131"></a>
<span class="sourceLineNo">132</span>     */<a name="line.132"></a>
<span class="sourceLineNo">133</span>    protected AbstractPollingIoConnector(IoSessionConfig sessionConfig, IoProcessor&lt;T&gt; processor) {<a name="line.133"></a>
<span class="sourceLineNo">134</span>        this(sessionConfig, null, processor, false);<a name="line.134"></a>
<span class="sourceLineNo">135</span>    }<a name="line.135"></a>
<span class="sourceLineNo">136</span><a name="line.136"></a>
<span class="sourceLineNo">137</span>    /**<a name="line.137"></a>
<span class="sourceLineNo">138</span>     * Constructor for {@link AbstractPollingIoConnector}. You need to provide a<a name="line.138"></a>
<span class="sourceLineNo">139</span>     * default session configuration and an {@link Executor} for handling I/O<a name="line.139"></a>
<span class="sourceLineNo">140</span>     * events. If null {@link Executor} is provided, a default one will be<a name="line.140"></a>
<span class="sourceLineNo">141</span>     * created using {@link Executors#newCachedThreadPool()}.<a name="line.141"></a>
<span class="sourceLineNo">142</span>     * <a name="line.142"></a>
<span class="sourceLineNo">143</span>     * @see AbstractIoService#AbstractIoService(IoSessionConfig, Executor)<a name="line.143"></a>
<span class="sourceLineNo">144</span>     * <a name="line.144"></a>
<span class="sourceLineNo">145</span>     * @param sessionConfig<a name="line.145"></a>
<span class="sourceLineNo">146</span>     *            the default configuration for the managed {@link IoSession}<a name="line.146"></a>
<span class="sourceLineNo">147</span>     * @param executor<a name="line.147"></a>
<span class="sourceLineNo">148</span>     *            the {@link Executor} used for handling asynchronous execution<a name="line.148"></a>
<span class="sourceLineNo">149</span>     *            of I/O events. Can be &lt;code&gt;null&lt;/code&gt;.<a name="line.149"></a>
<span class="sourceLineNo">150</span>     * @param processor<a name="line.150"></a>
<span class="sourceLineNo">151</span>     *            the {@link IoProcessor} for processing the {@link IoSession}<a name="line.151"></a>
<span class="sourceLineNo">152</span>     *            of this transport, triggering events to the bound<a name="line.152"></a>
<span class="sourceLineNo">153</span>     *            {@link IoHandler} and processing the chains of<a name="line.153"></a>
<span class="sourceLineNo">154</span>     *            {@link IoFilter}<a name="line.154"></a>
<span class="sourceLineNo">155</span>     */<a name="line.155"></a>
<span class="sourceLineNo">156</span>    protected AbstractPollingIoConnector(IoSessionConfig sessionConfig, Executor executor, IoProcessor&lt;T&gt; processor) {<a name="line.156"></a>
<span class="sourceLineNo">157</span>        this(sessionConfig, executor, processor, false);<a name="line.157"></a>
<span class="sourceLineNo">158</span>    }<a name="line.158"></a>
<span class="sourceLineNo">159</span><a name="line.159"></a>
<span class="sourceLineNo">160</span>    /**<a name="line.160"></a>
<span class="sourceLineNo">161</span>     * Constructor for {@link AbstractPollingIoAcceptor}. You need to provide a<a name="line.161"></a>
<span class="sourceLineNo">162</span>     * default session configuration and an {@link Executor} for handling I/O<a name="line.162"></a>
<span class="sourceLineNo">163</span>     * events. If null {@link Executor} is provided, a default one will be<a name="line.163"></a>
<span class="sourceLineNo">164</span>     * created using {@link Executors#newCachedThreadPool()}.<a name="line.164"></a>
<span class="sourceLineNo">165</span>     * <a name="line.165"></a>
<span class="sourceLineNo">166</span>     * @see AbstractIoService#AbstractIoService(IoSessionConfig, Executor)<a name="line.166"></a>
<span class="sourceLineNo">167</span>     * <a name="line.167"></a>
<span class="sourceLineNo">168</span>     * @param sessionConfig<a name="line.168"></a>
<span class="sourceLineNo">169</span>     *            the default configuration for the managed {@link IoSession}<a name="line.169"></a>
<span class="sourceLineNo">170</span>     * @param executor<a name="line.170"></a>
<span class="sourceLineNo">171</span>     *            the {@link Executor} used for handling asynchronous execution<a name="line.171"></a>
<span class="sourceLineNo">172</span>     *            of I/O events. Can be &lt;code&gt;null&lt;/code&gt;.<a name="line.172"></a>
<span class="sourceLineNo">173</span>     * @param processor<a name="line.173"></a>
<span class="sourceLineNo">174</span>     *            the {@link IoProcessor} for processing the {@link IoSession}<a name="line.174"></a>
<span class="sourceLineNo">175</span>     *            of this transport, triggering events to the bound<a name="line.175"></a>
<span class="sourceLineNo">176</span>     *            {@link IoHandler} and processing the chains of<a name="line.176"></a>
<span class="sourceLineNo">177</span>     *            {@link IoFilter}<a name="line.177"></a>
<span class="sourceLineNo">178</span>     * @param createdProcessor<a name="line.178"></a>
<span class="sourceLineNo">179</span>     *            tagging the processor as automatically created, so it will be<a name="line.179"></a>
<span class="sourceLineNo">180</span>     *            automatically disposed<a name="line.180"></a>
<span class="sourceLineNo">181</span>     */<a name="line.181"></a>
<span class="sourceLineNo">182</span>    private AbstractPollingIoConnector(IoSessionConfig sessionConfig, Executor executor, IoProcessor&lt;T&gt; processor,<a name="line.182"></a>
<span class="sourceLineNo">183</span>            boolean createdProcessor) {<a name="line.183"></a>
<span class="sourceLineNo">184</span>        super(sessionConfig, executor);<a name="line.184"></a>
<span class="sourceLineNo">185</span><a name="line.185"></a>
<span class="sourceLineNo">186</span>        if (processor == null) {<a name="line.186"></a>
<span class="sourceLineNo">187</span>            throw new IllegalArgumentException("processor");<a name="line.187"></a>
<span class="sourceLineNo">188</span>        }<a name="line.188"></a>
<span class="sourceLineNo">189</span><a name="line.189"></a>
<span class="sourceLineNo">190</span>        this.processor = processor;<a name="line.190"></a>
<span class="sourceLineNo">191</span>        this.createdProcessor = createdProcessor;<a name="line.191"></a>
<span class="sourceLineNo">192</span><a name="line.192"></a>
<span class="sourceLineNo">193</span>        try {<a name="line.193"></a>
<span class="sourceLineNo">194</span>            init();<a name="line.194"></a>
<span class="sourceLineNo">195</span>            selectable = true;<a name="line.195"></a>
<span class="sourceLineNo">196</span>        } catch (RuntimeException e) {<a name="line.196"></a>
<span class="sourceLineNo">197</span>            throw e;<a name="line.197"></a>
<span class="sourceLineNo">198</span>        } catch (Exception e) {<a name="line.198"></a>
<span class="sourceLineNo">199</span>            throw new RuntimeIoException("Failed to initialize.", e);<a name="line.199"></a>
<span class="sourceLineNo">200</span>        } finally {<a name="line.200"></a>
<span class="sourceLineNo">201</span>            if (!selectable) {<a name="line.201"></a>
<span class="sourceLineNo">202</span>                try {<a name="line.202"></a>
<span class="sourceLineNo">203</span>                    destroy();<a name="line.203"></a>
<span class="sourceLineNo">204</span>                } catch (Exception e) {<a name="line.204"></a>
<span class="sourceLineNo">205</span>                    ExceptionMonitor.getInstance().exceptionCaught(e);<a name="line.205"></a>
<span class="sourceLineNo">206</span>                }<a name="line.206"></a>
<span class="sourceLineNo">207</span>            }<a name="line.207"></a>
<span class="sourceLineNo">208</span>        }<a name="line.208"></a>
<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
<span class="sourceLineNo">210</span><a name="line.210"></a>
<span class="sourceLineNo">211</span>    /**<a name="line.211"></a>
<span class="sourceLineNo">212</span>     * Initialize the polling system, will be called at construction time.<a name="line.212"></a>
<span class="sourceLineNo">213</span>     * @throws Exception any exception thrown by the underlying system calls<a name="line.213"></a>
<span class="sourceLineNo">214</span>     */<a name="line.214"></a>
<span class="sourceLineNo">215</span>    protected abstract void init() throws Exception;<a name="line.215"></a>
<span class="sourceLineNo">216</span><a name="line.216"></a>
<span class="sourceLineNo">217</span>    /**<a name="line.217"></a>
<span class="sourceLineNo">218</span>     * Destroy the polling system, will be called when this {@link IoConnector}<a name="line.218"></a>
<span class="sourceLineNo">219</span>     * implementation will be disposed.<a name="line.219"></a>
<span class="sourceLineNo">220</span>     * @throws Exception any exception thrown by the underlying systems calls<a name="line.220"></a>
<span class="sourceLineNo">221</span>     */<a name="line.221"></a>
<span class="sourceLineNo">222</span>    protected abstract void destroy() throws Exception;<a name="line.222"></a>
<span class="sourceLineNo">223</span><a name="line.223"></a>
<span class="sourceLineNo">224</span>    /**<a name="line.224"></a>
<span class="sourceLineNo">225</span>     * Create a new client socket handle from a local {@link SocketAddress}<a name="line.225"></a>
<span class="sourceLineNo">226</span>     * @param localAddress the socket address for binding the new client socket<a name="line.226"></a>
<span class="sourceLineNo">227</span>     * @return a new client socket handle<a name="line.227"></a>
<span class="sourceLineNo">228</span>     * @throws Exception any exception thrown by the underlying systems calls<a name="line.228"></a>
<span class="sourceLineNo">229</span>     */<a name="line.229"></a>
<span class="sourceLineNo">230</span>    protected abstract H newHandle(SocketAddress localAddress) throws Exception;<a name="line.230"></a>
<span class="sourceLineNo">231</span><a name="line.231"></a>
<span class="sourceLineNo">232</span>    /**<a name="line.232"></a>
<span class="sourceLineNo">233</span>     * Connect a newly created client socket handle to a remote {@link SocketAddress}.<a name="line.233"></a>
<span class="sourceLineNo">234</span>     * This operation is non-blocking, so at end of the call the socket can be still in connection<a name="line.234"></a>
<span class="sourceLineNo">235</span>     * process.<a name="line.235"></a>
<span class="sourceLineNo">236</span>     * @param handle the client socket handle<a name="line.236"></a>
<span class="sourceLineNo">237</span>     * @param remoteAddress the remote address where to connect<a name="line.237"></a>
<span class="sourceLineNo">238</span>     * @return &lt;tt&gt;true&lt;/tt&gt; if a connection was established, &lt;tt&gt;false&lt;/tt&gt; if this client socket<a name="line.238"></a>
<span class="sourceLineNo">239</span>     *         is in non-blocking mode and the connection operation is in progress<a name="line.239"></a>
<span class="sourceLineNo">240</span>     * @throws Exception<a name="line.240"></a>
<span class="sourceLineNo">241</span>     */<a name="line.241"></a>
<span class="sourceLineNo">242</span>    protected abstract boolean connect(H handle, SocketAddress remoteAddress) throws Exception;<a name="line.242"></a>
<span class="sourceLineNo">243</span><a name="line.243"></a>
<span class="sourceLineNo">244</span>    /**<a name="line.244"></a>
<span class="sourceLineNo">245</span>     * Finish the connection process of a client socket after it was marked as<a name="line.245"></a>
<span class="sourceLineNo">246</span>     * ready to process by the {@link #select(int)} call. The socket will be<a name="line.246"></a>
<span class="sourceLineNo">247</span>     * connected or reported as connection failed.<a name="line.247"></a>
<span class="sourceLineNo">248</span>     * <a name="line.248"></a>
<span class="sourceLineNo">249</span>     * @param handle<a name="line.249"></a>
<span class="sourceLineNo">250</span>     *            the client socket handle to finish to connect<a name="line.250"></a>
<span class="sourceLineNo">251</span>     * @return true if the socket is connected<a name="line.251"></a>
<span class="sourceLineNo">252</span>     * @throws Exception<a name="line.252"></a>
<span class="sourceLineNo">253</span>     *             any exception thrown by the underlying systems calls<a name="line.253"></a>
<span class="sourceLineNo">254</span>     */<a name="line.254"></a>
<span class="sourceLineNo">255</span>    protected abstract boolean finishConnect(H handle) throws Exception;<a name="line.255"></a>
<span class="sourceLineNo">256</span><a name="line.256"></a>
<span class="sourceLineNo">257</span>    /**<a name="line.257"></a>
<span class="sourceLineNo">258</span>     * Create a new {@link IoSession} from a connected socket client handle.<a name="line.258"></a>
<span class="sourceLineNo">259</span>     * Will assign the created {@link IoSession} to the given {@link IoProcessor} for<a name="line.259"></a>
<span class="sourceLineNo">260</span>     * managing future I/O events.<a name="line.260"></a>
<span class="sourceLineNo">261</span>     * @param processor the processor in charge of this session<a name="line.261"></a>
<span class="sourceLineNo">262</span>     * @param handle the newly connected client socket handle<a name="line.262"></a>
<span class="sourceLineNo">263</span>     * @return a new {@link IoSession}<a name="line.263"></a>
<span class="sourceLineNo">264</span>     * @throws Exception any exception thrown by the underlying systems calls<a name="line.264"></a>
<span class="sourceLineNo">265</span>     */<a name="line.265"></a>
<span class="sourceLineNo">266</span>    protected abstract T newSession(IoProcessor&lt;T&gt; processor, H handle) throws Exception;<a name="line.266"></a>
<span class="sourceLineNo">267</span><a name="line.267"></a>
<span class="sourceLineNo">268</span>    /**<a name="line.268"></a>
<span class="sourceLineNo">269</span>     * Close a client socket.<a name="line.269"></a>
<span class="sourceLineNo">270</span>     * @param handle the client socket<a name="line.270"></a>
<span class="sourceLineNo">271</span>     * @throws Exception any exception thrown by the underlying systems calls<a name="line.271"></a>
<span class="sourceLineNo">272</span>     */<a name="line.272"></a>
<span class="sourceLineNo">273</span>    protected abstract void close(H handle) throws Exception;<a name="line.273"></a>
<span class="sourceLineNo">274</span><a name="line.274"></a>
<span class="sourceLineNo">275</span>    /**<a name="line.275"></a>
<span class="sourceLineNo">276</span>     * Interrupt the {@link #select(int)} method. Used when the poll set need to<a name="line.276"></a>
<span class="sourceLineNo">277</span>     * be modified.<a name="line.277"></a>
<span class="sourceLineNo">278</span>     */<a name="line.278"></a>
<span class="sourceLineNo">279</span>    protected abstract void wakeup();<a name="line.279"></a>
<span class="sourceLineNo">280</span><a name="line.280"></a>
<span class="sourceLineNo">281</span>    /**<a name="line.281"></a>
<span class="sourceLineNo">282</span>     * Check for connected sockets, interrupt when at least a connection is processed (connected or<a name="line.282"></a>
<span class="sourceLineNo">283</span>     * failed to connect). All the client socket descriptors processed need to be returned by<a name="line.283"></a>
<span class="sourceLineNo">284</span>     * {@link #selectedHandles()}<a name="line.284"></a>
<span class="sourceLineNo">285</span>     * @return The number of socket having received some data<a name="line.285"></a>
<span class="sourceLineNo">286</span>     * @throws Exception any exception thrown by the underlying systems calls<a name="line.286"></a>
<span class="sourceLineNo">287</span>     */<a name="line.287"></a>
<span class="sourceLineNo">288</span>    protected abstract int select(int timeout) throws Exception;<a name="line.288"></a>
<span class="sourceLineNo">289</span><a name="line.289"></a>
<span class="sourceLineNo">290</span>    /**<a name="line.290"></a>
<span class="sourceLineNo">291</span>     * {@link Iterator} for the set of client sockets found connected or failed<a name="line.291"></a>
<span class="sourceLineNo">292</span>     * to connect during the last {@link #select(int)} call.<a name="line.292"></a>
<span class="sourceLineNo">293</span>     * <a name="line.293"></a>
<span class="sourceLineNo">294</span>     * @return the list of client socket handles to process<a name="line.294"></a>
<span class="sourceLineNo">295</span>     */<a name="line.295"></a>
<span class="sourceLineNo">296</span>    protected abstract Iterator&lt;H&gt; selectedHandles();<a name="line.296"></a>
<span class="sourceLineNo">297</span><a name="line.297"></a>
<span class="sourceLineNo">298</span>    /**<a name="line.298"></a>
<span class="sourceLineNo">299</span>     * {@link Iterator} for all the client sockets polled for connection.<a name="line.299"></a>
<span class="sourceLineNo">300</span>     * @return the list of client sockets currently polled for connection<a name="line.300"></a>
<span class="sourceLineNo">301</span>     */<a name="line.301"></a>
<span class="sourceLineNo">302</span>    protected abstract Iterator&lt;H&gt; allHandles();<a name="line.302"></a>
<span class="sourceLineNo">303</span><a name="line.303"></a>
<span class="sourceLineNo">304</span>    /**<a name="line.304"></a>
<span class="sourceLineNo">305</span>     * Register a new client socket for connection, add it to connection polling<a name="line.305"></a>
<span class="sourceLineNo">306</span>     * @param handle client socket handle<a name="line.306"></a>
<span class="sourceLineNo">307</span>     * @param request the associated {@link ConnectionRequest}<a name="line.307"></a>
<span class="sourceLineNo">308</span>     * @throws Exception any exception thrown by the underlying systems calls<a name="line.308"></a>
<span class="sourceLineNo">309</span>     */<a name="line.309"></a>
<span class="sourceLineNo">310</span>    protected abstract void register(H handle, ConnectionRequest request) throws Exception;<a name="line.310"></a>
<span class="sourceLineNo">311</span><a name="line.311"></a>
<span class="sourceLineNo">312</span>    /**<a name="line.312"></a>
<span class="sourceLineNo">313</span>     * get the {@link ConnectionRequest} for a given client socket handle<a name="line.313"></a>
<span class="sourceLineNo">314</span>     * @param handle the socket client handle<a name="line.314"></a>
<span class="sourceLineNo">315</span>     * @return the connection request if the socket is connecting otherwise &lt;code&gt;null&lt;/code&gt;<a name="line.315"></a>
<span class="sourceLineNo">316</span>     */<a name="line.316"></a>
<span class="sourceLineNo">317</span>    protected abstract ConnectionRequest getConnectionRequest(H handle);<a name="line.317"></a>
<span class="sourceLineNo">318</span><a name="line.318"></a>
<span class="sourceLineNo">319</span>    /**<a name="line.319"></a>
<span class="sourceLineNo">320</span>     * {@inheritDoc}<a name="line.320"></a>
<span class="sourceLineNo">321</span>     */<a name="line.321"></a>
<span class="sourceLineNo">322</span>    @Override<a name="line.322"></a>
<span class="sourceLineNo">323</span>    protected final void dispose0() throws Exception {<a name="line.323"></a>
<span class="sourceLineNo">324</span>        startupWorker();<a name="line.324"></a>
<span class="sourceLineNo">325</span>        wakeup();<a name="line.325"></a>
<span class="sourceLineNo">326</span>    }<a name="line.326"></a>
<span class="sourceLineNo">327</span><a name="line.327"></a>
<span class="sourceLineNo">328</span>    /**<a name="line.328"></a>
<span class="sourceLineNo">329</span>     * {@inheritDoc}<a name="line.329"></a>
<span class="sourceLineNo">330</span>     */<a name="line.330"></a>
<span class="sourceLineNo">331</span>    @Override<a name="line.331"></a>
<span class="sourceLineNo">332</span>    @SuppressWarnings("unchecked")<a name="line.332"></a>
<span class="sourceLineNo">333</span>    protected final ConnectFuture connect0(SocketAddress remoteAddress, SocketAddress localAddress,<a name="line.333"></a>
<span class="sourceLineNo">334</span>            IoSessionInitializer&lt;? extends ConnectFuture&gt; sessionInitializer) {<a name="line.334"></a>
<span class="sourceLineNo">335</span>        H handle = null;<a name="line.335"></a>
<span class="sourceLineNo">336</span>        boolean success = false;<a name="line.336"></a>
<span class="sourceLineNo">337</span>        try {<a name="line.337"></a>
<span class="sourceLineNo">338</span>            handle = newHandle(localAddress);<a name="line.338"></a>
<span class="sourceLineNo">339</span>            if (connect(handle, remoteAddress)) {<a name="line.339"></a>
<span class="sourceLineNo">340</span>                ConnectFuture future = new DefaultConnectFuture();<a name="line.340"></a>
<span class="sourceLineNo">341</span>                T session = newSession(processor, handle);<a name="line.341"></a>
<span class="sourceLineNo">342</span>                initSession(session, future, sessionInitializer);<a name="line.342"></a>
<span class="sourceLineNo">343</span>                // Forward the remaining process to the IoProcessor.<a name="line.343"></a>
<span class="sourceLineNo">344</span>                session.getProcessor().add(session);<a name="line.344"></a>
<span class="sourceLineNo">345</span>                success = true;<a name="line.345"></a>
<span class="sourceLineNo">346</span>                return future;<a name="line.346"></a>
<span class="sourceLineNo">347</span>            }<a name="line.347"></a>
<span class="sourceLineNo">348</span><a name="line.348"></a>
<span class="sourceLineNo">349</span>            success = true;<a name="line.349"></a>
<span class="sourceLineNo">350</span>        } catch (Exception e) {<a name="line.350"></a>
<span class="sourceLineNo">351</span>            return DefaultConnectFuture.newFailedFuture(e);<a name="line.351"></a>
<span class="sourceLineNo">352</span>        } finally {<a name="line.352"></a>
<span class="sourceLineNo">353</span>            if (!success &amp;&amp; handle != null) {<a name="line.353"></a>
<span class="sourceLineNo">354</span>                try {<a name="line.354"></a>
<span class="sourceLineNo">355</span>                    close(handle);<a name="line.355"></a>
<span class="sourceLineNo">356</span>                } catch (Exception e) {<a name="line.356"></a>
<span class="sourceLineNo">357</span>                    ExceptionMonitor.getInstance().exceptionCaught(e);<a name="line.357"></a>
<span class="sourceLineNo">358</span>                }<a name="line.358"></a>
<span class="sourceLineNo">359</span>            }<a name="line.359"></a>
<span class="sourceLineNo">360</span>        }<a name="line.360"></a>
<span class="sourceLineNo">361</span><a name="line.361"></a>
<span class="sourceLineNo">362</span>        ConnectionRequest request = new ConnectionRequest(handle, sessionInitializer);<a name="line.362"></a>
<span class="sourceLineNo">363</span>        connectQueue.add(request);<a name="line.363"></a>
<span class="sourceLineNo">364</span>        startupWorker();<a name="line.364"></a>
<span class="sourceLineNo">365</span>        wakeup();<a name="line.365"></a>
<span class="sourceLineNo">366</span><a name="line.366"></a>
<span class="sourceLineNo">367</span>        return request;<a name="line.367"></a>
<span class="sourceLineNo">368</span>    }<a name="line.368"></a>
<span class="sourceLineNo">369</span><a name="line.369"></a>
<span class="sourceLineNo">370</span>    private void startupWorker() {<a name="line.370"></a>
<span class="sourceLineNo">371</span>        if (!selectable) {<a name="line.371"></a>
<span class="sourceLineNo">372</span>            connectQueue.clear();<a name="line.372"></a>
<span class="sourceLineNo">373</span>            cancelQueue.clear();<a name="line.373"></a>
<span class="sourceLineNo">374</span>        }<a name="line.374"></a>
<span class="sourceLineNo">375</span><a name="line.375"></a>
<span class="sourceLineNo">376</span>        Connector connector = connectorRef.get();<a name="line.376"></a>
<span class="sourceLineNo">377</span><a name="line.377"></a>
<span class="sourceLineNo">378</span>        if (connector == null) {<a name="line.378"></a>
<span class="sourceLineNo">379</span>            connector = new Connector();<a name="line.379"></a>
<span class="sourceLineNo">380</span><a name="line.380"></a>
<span class="sourceLineNo">381</span>            if (connectorRef.compareAndSet(null, connector)) {<a name="line.381"></a>
<span class="sourceLineNo">382</span>                executeWorker(connector);<a name="line.382"></a>
<span class="sourceLineNo">383</span>            }<a name="line.383"></a>
<span class="sourceLineNo">384</span>        }<a name="line.384"></a>
<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
<span class="sourceLineNo">386</span><a name="line.386"></a>
<span class="sourceLineNo">387</span>    private int registerNew() {<a name="line.387"></a>
<span class="sourceLineNo">388</span>        int nHandles = 0;<a name="line.388"></a>
<span class="sourceLineNo">389</span>        for (;;) {<a name="line.389"></a>
<span class="sourceLineNo">390</span>            ConnectionRequest req = connectQueue.poll();<a name="line.390"></a>
<span class="sourceLineNo">391</span>            if (req == null) {<a name="line.391"></a>
<span class="sourceLineNo">392</span>                break;<a name="line.392"></a>
<span class="sourceLineNo">393</span>            }<a name="line.393"></a>
<span class="sourceLineNo">394</span><a name="line.394"></a>
<span class="sourceLineNo">395</span>            H handle = req.handle;<a name="line.395"></a>
<span class="sourceLineNo">396</span>            try {<a name="line.396"></a>
<span class="sourceLineNo">397</span>                register(handle, req);<a name="line.397"></a>
<span class="sourceLineNo">398</span>                nHandles++;<a name="line.398"></a>
<span class="sourceLineNo">399</span>            } catch (Exception e) {<a name="line.399"></a>
<span class="sourceLineNo">400</span>                req.setException(e);<a name="line.400"></a>
<span class="sourceLineNo">401</span>                try {<a name="line.401"></a>
<span class="sourceLineNo">402</span>                    close(handle);<a name="line.402"></a>
<span class="sourceLineNo">403</span>                } catch (Exception e2) {<a name="line.403"></a>
<span class="sourceLineNo">404</span>                    ExceptionMonitor.getInstance().exceptionCaught(e2);<a name="line.404"></a>
<span class="sourceLineNo">405</span>                }<a name="line.405"></a>
<span class="sourceLineNo">406</span>            }<a name="line.406"></a>
<span class="sourceLineNo">407</span>        }<a name="line.407"></a>
<span class="sourceLineNo">408</span>        return nHandles;<a name="line.408"></a>
<span class="sourceLineNo">409</span>    }<a name="line.409"></a>
<span class="sourceLineNo">410</span><a name="line.410"></a>
<span class="sourceLineNo">411</span>    private int cancelKeys() {<a name="line.411"></a>
<span class="sourceLineNo">412</span>        int nHandles = 0;<a name="line.412"></a>
<span class="sourceLineNo">413</span><a name="line.413"></a>
<span class="sourceLineNo">414</span>        for (;;) {<a name="line.414"></a>
<span class="sourceLineNo">415</span>            ConnectionRequest req = cancelQueue.poll();<a name="line.415"></a>
<span class="sourceLineNo">416</span><a name="line.416"></a>
<span class="sourceLineNo">417</span>            if (req == null) {<a name="line.417"></a>
<span class="sourceLineNo">418</span>                break;<a name="line.418"></a>
<span class="sourceLineNo">419</span>            }<a name="line.419"></a>
<span class="sourceLineNo">420</span><a name="line.420"></a>
<span class="sourceLineNo">421</span>            H handle = req.handle;<a name="line.421"></a>
<span class="sourceLineNo">422</span><a name="line.422"></a>
<span class="sourceLineNo">423</span>            try {<a name="line.423"></a>
<span class="sourceLineNo">424</span>                close(handle);<a name="line.424"></a>
<span class="sourceLineNo">425</span>            } catch (Exception e) {<a name="line.425"></a>
<span class="sourceLineNo">426</span>                ExceptionMonitor.getInstance().exceptionCaught(e);<a name="line.426"></a>
<span class="sourceLineNo">427</span>            } finally {<a name="line.427"></a>
<span class="sourceLineNo">428</span>                nHandles++;<a name="line.428"></a>
<span class="sourceLineNo">429</span>            }<a name="line.429"></a>
<span class="sourceLineNo">430</span>        }<a name="line.430"></a>
<span class="sourceLineNo">431</span><a name="line.431"></a>
<span class="sourceLineNo">432</span>        if (nHandles &gt; 0) {<a name="line.432"></a>
<span class="sourceLineNo">433</span>            wakeup();<a name="line.433"></a>
<span class="sourceLineNo">434</span>        }<a name="line.434"></a>
<span class="sourceLineNo">435</span><a name="line.435"></a>
<span class="sourceLineNo">436</span>        return nHandles;<a name="line.436"></a>
<span class="sourceLineNo">437</span>    }<a name="line.437"></a>
<span class="sourceLineNo">438</span><a name="line.438"></a>
<span class="sourceLineNo">439</span>    /**<a name="line.439"></a>
<span class="sourceLineNo">440</span>     * Process the incoming connections, creating a new session for each<a name="line.440"></a>
<span class="sourceLineNo">441</span>     * valid connection.<a name="line.441"></a>
<span class="sourceLineNo">442</span>     */<a name="line.442"></a>
<span class="sourceLineNo">443</span>    private int processConnections(Iterator&lt;H&gt; handlers) {<a name="line.443"></a>
<span class="sourceLineNo">444</span>        int nHandles = 0;<a name="line.444"></a>
<span class="sourceLineNo">445</span><a name="line.445"></a>
<span class="sourceLineNo">446</span>        // Loop on each connection request<a name="line.446"></a>
<span class="sourceLineNo">447</span>        while (handlers.hasNext()) {<a name="line.447"></a>
<span class="sourceLineNo">448</span>            H handle = handlers.next();<a name="line.448"></a>
<span class="sourceLineNo">449</span>            handlers.remove();<a name="line.449"></a>
<span class="sourceLineNo">450</span><a name="line.450"></a>
<span class="sourceLineNo">451</span>            ConnectionRequest connectionRequest = getConnectionRequest(handle);<a name="line.451"></a>
<span class="sourceLineNo">452</span><a name="line.452"></a>
<span class="sourceLineNo">453</span>            if (connectionRequest == null) {<a name="line.453"></a>
<span class="sourceLineNo">454</span>                continue;<a name="line.454"></a>
<span class="sourceLineNo">455</span>            }<a name="line.455"></a>
<span class="sourceLineNo">456</span><a name="line.456"></a>
<span class="sourceLineNo">457</span>            boolean success = false;<a name="line.457"></a>
<span class="sourceLineNo">458</span>            try {<a name="line.458"></a>
<span class="sourceLineNo">459</span>                if (finishConnect(handle)) {<a name="line.459"></a>
<span class="sourceLineNo">460</span>                    T session = newSession(processor, handle);<a name="line.460"></a>
<span class="sourceLineNo">461</span>                    initSession(session, connectionRequest, connectionRequest.getSessionInitializer());<a name="line.461"></a>
<span class="sourceLineNo">462</span>                    // Forward the remaining process to the IoProcessor.<a name="line.462"></a>
<span class="sourceLineNo">463</span>                    session.getProcessor().add(session);<a name="line.463"></a>
<span class="sourceLineNo">464</span>                    nHandles++;<a name="line.464"></a>
<span class="sourceLineNo">465</span>                }<a name="line.465"></a>
<span class="sourceLineNo">466</span>                success = true;<a name="line.466"></a>
<span class="sourceLineNo">467</span>            } catch (Exception e) {<a name="line.467"></a>
<span class="sourceLineNo">468</span>                connectionRequest.setException(e);<a name="line.468"></a>
<span class="sourceLineNo">469</span>            } finally {<a name="line.469"></a>
<span class="sourceLineNo">470</span>                if (!success) {<a name="line.470"></a>
<span class="sourceLineNo">471</span>                    // The connection failed, we have to cancel it.<a name="line.471"></a>
<span class="sourceLineNo">472</span>                    cancelQueue.offer(connectionRequest);<a name="line.472"></a>
<span class="sourceLineNo">473</span>                }<a name="line.473"></a>
<span class="sourceLineNo">474</span>            }<a name="line.474"></a>
<span class="sourceLineNo">475</span>        }<a name="line.475"></a>
<span class="sourceLineNo">476</span>        return nHandles;<a name="line.476"></a>
<span class="sourceLineNo">477</span>    }<a name="line.477"></a>
<span class="sourceLineNo">478</span><a name="line.478"></a>
<span class="sourceLineNo">479</span>    private void processTimedOutSessions(Iterator&lt;H&gt; handles) {<a name="line.479"></a>
<span class="sourceLineNo">480</span>        long currentTime = System.currentTimeMillis();<a name="line.480"></a>
<span class="sourceLineNo">481</span><a name="line.481"></a>
<span class="sourceLineNo">482</span>        while (handles.hasNext()) {<a name="line.482"></a>
<span class="sourceLineNo">483</span>            H handle = handles.next();<a name="line.483"></a>
<span class="sourceLineNo">484</span>            ConnectionRequest connectionRequest = getConnectionRequest(handle);<a name="line.484"></a>
<span class="sourceLineNo">485</span><a name="line.485"></a>
<span class="sourceLineNo">486</span>            if ((connectionRequest != null) &amp;&amp; (currentTime &gt;= connectionRequest.deadline)) {<a name="line.486"></a>
<span class="sourceLineNo">487</span>                connectionRequest.setException(new ConnectException("Connection timed out."));<a name="line.487"></a>
<span class="sourceLineNo">488</span>                cancelQueue.offer(connectionRequest);<a name="line.488"></a>
<span class="sourceLineNo">489</span>            }<a name="line.489"></a>
<span class="sourceLineNo">490</span>        }<a name="line.490"></a>
<span class="sourceLineNo">491</span>    }<a name="line.491"></a>
<span class="sourceLineNo">492</span><a name="line.492"></a>
<span class="sourceLineNo">493</span>    private class Connector implements Runnable {<a name="line.493"></a>
<span class="sourceLineNo">494</span><a name="line.494"></a>
<span class="sourceLineNo">495</span>        public void run() {<a name="line.495"></a>
<span class="sourceLineNo">496</span>            assert (connectorRef.get() == this);<a name="line.496"></a>
<span class="sourceLineNo">497</span><a name="line.497"></a>
<span class="sourceLineNo">498</span>            int nHandles = 0;<a name="line.498"></a>
<span class="sourceLineNo">499</span><a name="line.499"></a>
<span class="sourceLineNo">500</span>            while (selectable) {<a name="line.500"></a>
<span class="sourceLineNo">501</span>                try {<a name="line.501"></a>
<span class="sourceLineNo">502</span>                    // the timeout for select shall be smaller of the connect<a name="line.502"></a>
<span class="sourceLineNo">503</span>                    // timeout or 1 second...<a name="line.503"></a>
<span class="sourceLineNo">504</span>                    int timeout = (int) Math.min(getConnectTimeoutMillis(), 1000L);<a name="line.504"></a>
<span class="sourceLineNo">505</span>                    int selected = select(timeout);<a name="line.505"></a>
<span class="sourceLineNo">506</span><a name="line.506"></a>
<span class="sourceLineNo">507</span>                    nHandles += registerNew();<a name="line.507"></a>
<span class="sourceLineNo">508</span><a name="line.508"></a>
<span class="sourceLineNo">509</span>                    // get a chance to get out of the connector loop, if we don't have any more handles<a name="line.509"></a>
<span class="sourceLineNo">510</span>                    if (nHandles == 0) {<a name="line.510"></a>
<span class="sourceLineNo">511</span>                        connectorRef.set(null);<a name="line.511"></a>
<span class="sourceLineNo">512</span><a name="line.512"></a>
<span class="sourceLineNo">513</span>                        if (connectQueue.isEmpty()) {<a name="line.513"></a>
<span class="sourceLineNo">514</span>                            assert (connectorRef.get() != this);<a name="line.514"></a>
<span class="sourceLineNo">515</span>                            break;<a name="line.515"></a>
<span class="sourceLineNo">516</span>                        }<a name="line.516"></a>
<span class="sourceLineNo">517</span><a name="line.517"></a>
<span class="sourceLineNo">518</span>                        if (!connectorRef.compareAndSet(null, this)) {<a name="line.518"></a>
<span class="sourceLineNo">519</span>                            assert (connectorRef.get() != this);<a name="line.519"></a>
<span class="sourceLineNo">520</span>                            break;<a name="line.520"></a>
<span class="sourceLineNo">521</span>                        }<a name="line.521"></a>
<span class="sourceLineNo">522</span><a name="line.522"></a>
<span class="sourceLineNo">523</span>                        assert (connectorRef.get() == this);<a name="line.523"></a>
<span class="sourceLineNo">524</span>                    }<a name="line.524"></a>
<span class="sourceLineNo">525</span><a name="line.525"></a>
<span class="sourceLineNo">526</span>                    if (selected &gt; 0) {<a name="line.526"></a>
<span class="sourceLineNo">527</span>                        nHandles -= processConnections(selectedHandles());<a name="line.527"></a>
<span class="sourceLineNo">528</span>                    }<a name="line.528"></a>
<span class="sourceLineNo">529</span><a name="line.529"></a>
<span class="sourceLineNo">530</span>                    processTimedOutSessions(allHandles());<a name="line.530"></a>
<span class="sourceLineNo">531</span><a name="line.531"></a>
<span class="sourceLineNo">532</span>                    nHandles -= cancelKeys();<a name="line.532"></a>
<span class="sourceLineNo">533</span>                } catch (ClosedSelectorException cse) {<a name="line.533"></a>
<span class="sourceLineNo">534</span>                    // If the selector has been closed, we can exit the loop<a name="line.534"></a>
<span class="sourceLineNo">535</span>                    ExceptionMonitor.getInstance().exceptionCaught(cse);<a name="line.535"></a>
<span class="sourceLineNo">536</span>                    break;<a name="line.536"></a>
<span class="sourceLineNo">537</span>                } catch (Exception e) {<a name="line.537"></a>
<span class="sourceLineNo">538</span>                    ExceptionMonitor.getInstance().exceptionCaught(e);<a name="line.538"></a>
<span class="sourceLineNo">539</span><a name="line.539"></a>
<span class="sourceLineNo">540</span>                    try {<a name="line.540"></a>
<span class="sourceLineNo">541</span>                        Thread.sleep(1000);<a name="line.541"></a>
<span class="sourceLineNo">542</span>                    } catch (InterruptedException e1) {<a name="line.542"></a>
<span class="sourceLineNo">543</span>                        ExceptionMonitor.getInstance().exceptionCaught(e1);<a name="line.543"></a>
<span class="sourceLineNo">544</span>                    }<a name="line.544"></a>
<span class="sourceLineNo">545</span>                }<a name="line.545"></a>
<span class="sourceLineNo">546</span>            }<a name="line.546"></a>
<span class="sourceLineNo">547</span><a name="line.547"></a>
<span class="sourceLineNo">548</span>            if (selectable &amp;&amp; isDisposing()) {<a name="line.548"></a>
<span class="sourceLineNo">549</span>                selectable = false;<a name="line.549"></a>
<span class="sourceLineNo">550</span>                try {<a name="line.550"></a>
<span class="sourceLineNo">551</span>                    if (createdProcessor) {<a name="line.551"></a>
<span class="sourceLineNo">552</span>                        processor.dispose();<a name="line.552"></a>
<span class="sourceLineNo">553</span>                    }<a name="line.553"></a>
<span class="sourceLineNo">554</span>                } finally {<a name="line.554"></a>
<span class="sourceLineNo">555</span>                    try {<a name="line.555"></a>
<span class="sourceLineNo">556</span>                        synchronized (disposalLock) {<a name="line.556"></a>
<span class="sourceLineNo">557</span>                            if (isDisposing()) {<a name="line.557"></a>
<span class="sourceLineNo">558</span>                                destroy();<a name="line.558"></a>
<span class="sourceLineNo">559</span>                            }<a name="line.559"></a>
<span class="sourceLineNo">560</span>                        }<a name="line.560"></a>
<span class="sourceLineNo">561</span>                    } catch (Exception e) {<a name="line.561"></a>
<span class="sourceLineNo">562</span>                        ExceptionMonitor.getInstance().exceptionCaught(e);<a name="line.562"></a>
<span class="sourceLineNo">563</span>                    } finally {<a name="line.563"></a>
<span class="sourceLineNo">564</span>                        disposalFuture.setDone();<a name="line.564"></a>
<span class="sourceLineNo">565</span>                    }<a name="line.565"></a>
<span class="sourceLineNo">566</span>                }<a name="line.566"></a>
<span class="sourceLineNo">567</span>            }<a name="line.567"></a>
<span class="sourceLineNo">568</span>        }<a name="line.568"></a>
<span class="sourceLineNo">569</span>    }<a name="line.569"></a>
<span class="sourceLineNo">570</span><a name="line.570"></a>
<span class="sourceLineNo">571</span>    public final class ConnectionRequest extends DefaultConnectFuture {<a name="line.571"></a>
<span class="sourceLineNo">572</span>        private final H handle;<a name="line.572"></a>
<span class="sourceLineNo">573</span><a name="line.573"></a>
<span class="sourceLineNo">574</span>        private final long deadline;<a name="line.574"></a>
<span class="sourceLineNo">575</span><a name="line.575"></a>
<span class="sourceLineNo">576</span>        private final IoSessionInitializer&lt;? extends ConnectFuture&gt; sessionInitializer;<a name="line.576"></a>
<span class="sourceLineNo">577</span><a name="line.577"></a>
<span class="sourceLineNo">578</span>        public ConnectionRequest(H handle, IoSessionInitializer&lt;? extends ConnectFuture&gt; callback) {<a name="line.578"></a>
<span class="sourceLineNo">579</span>            this.handle = handle;<a name="line.579"></a>
<span class="sourceLineNo">580</span>            long timeout = getConnectTimeoutMillis();<a name="line.580"></a>
<span class="sourceLineNo">581</span>            if (timeout &lt;= 0L) {<a name="line.581"></a>
<span class="sourceLineNo">582</span>                this.deadline = Long.MAX_VALUE;<a name="line.582"></a>
<span class="sourceLineNo">583</span>            } else {<a name="line.583"></a>
<span class="sourceLineNo">584</span>                this.deadline = System.currentTimeMillis() + timeout;<a name="line.584"></a>
<span class="sourceLineNo">585</span>            }<a name="line.585"></a>
<span class="sourceLineNo">586</span>            this.sessionInitializer = callback;<a name="line.586"></a>
<span class="sourceLineNo">587</span>        }<a name="line.587"></a>
<span class="sourceLineNo">588</span><a name="line.588"></a>
<span class="sourceLineNo">589</span>        public H getHandle() {<a name="line.589"></a>
<span class="sourceLineNo">590</span>            return handle;<a name="line.590"></a>
<span class="sourceLineNo">591</span>        }<a name="line.591"></a>
<span class="sourceLineNo">592</span><a name="line.592"></a>
<span class="sourceLineNo">593</span>        public long getDeadline() {<a name="line.593"></a>
<span class="sourceLineNo">594</span>            return deadline;<a name="line.594"></a>
<span class="sourceLineNo">595</span>        }<a name="line.595"></a>
<span class="sourceLineNo">596</span><a name="line.596"></a>
<span class="sourceLineNo">597</span>        public IoSessionInitializer&lt;? extends ConnectFuture&gt; getSessionInitializer() {<a name="line.597"></a>
<span class="sourceLineNo">598</span>            return sessionInitializer;<a name="line.598"></a>
<span class="sourceLineNo">599</span>        }<a name="line.599"></a>
<span class="sourceLineNo">600</span><a name="line.600"></a>
<span class="sourceLineNo">601</span>        @Override<a name="line.601"></a>
<span class="sourceLineNo">602</span>        public void cancel() {<a name="line.602"></a>
<span class="sourceLineNo">603</span>            if (!isDone()) {<a name="line.603"></a>
<span class="sourceLineNo">604</span>                super.cancel();<a name="line.604"></a>
<span class="sourceLineNo">605</span>                cancelQueue.add(this);<a name="line.605"></a>
<span class="sourceLineNo">606</span>                startupWorker();<a name="line.606"></a>
<span class="sourceLineNo">607</span>                wakeup();<a name="line.607"></a>
<span class="sourceLineNo">608</span>            }<a name="line.608"></a>
<span class="sourceLineNo">609</span>        }<a name="line.609"></a>
<span class="sourceLineNo">610</span>    }<a name="line.610"></a>
<span class="sourceLineNo">611</span>}<a name="line.611"></a>




























































</pre>
</div>
</body>
</html>
