<!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.transport.socket.nio;<a name="line.20"></a>
<span class="sourceLineNo">021</span><a name="line.21"></a>
<span class="sourceLineNo">022</span>import java.io.IOException;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import java.net.Inet4Address;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import java.net.Inet6Address;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import java.net.InetAddress;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import java.net.InetSocketAddress;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import java.net.SocketAddress;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import java.nio.channels.ClosedSelectorException;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.nio.channels.DatagramChannel;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import java.nio.channels.SelectionKey;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import java.nio.channels.Selector;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import java.util.Collections;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import java.util.HashMap;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import java.util.HashSet;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import java.util.Iterator;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import java.util.List;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import java.util.Map;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import java.util.Queue;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import java.util.Set;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import java.util.concurrent.ConcurrentLinkedQueue;<a name="line.40"></a>
<span class="sourceLineNo">041</span>import java.util.concurrent.Executor;<a name="line.41"></a>
<span class="sourceLineNo">042</span>import java.util.concurrent.Semaphore;<a name="line.42"></a>
<span class="sourceLineNo">043</span><a name="line.43"></a>
<span class="sourceLineNo">044</span>import org.apache.mina.core.RuntimeIoException;<a name="line.44"></a>
<span class="sourceLineNo">045</span>import org.apache.mina.core.buffer.IoBuffer;<a name="line.45"></a>
<span class="sourceLineNo">046</span>import org.apache.mina.core.service.AbstractIoAcceptor;<a name="line.46"></a>
<span class="sourceLineNo">047</span>import org.apache.mina.core.service.IoAcceptor;<a name="line.47"></a>
<span class="sourceLineNo">048</span>import org.apache.mina.core.service.IoProcessor;<a name="line.48"></a>
<span class="sourceLineNo">049</span>import org.apache.mina.core.service.TransportMetadata;<a name="line.49"></a>
<span class="sourceLineNo">050</span>import org.apache.mina.core.session.AbstractIoSession;<a name="line.50"></a>
<span class="sourceLineNo">051</span>import org.apache.mina.core.session.ExpiringSessionRecycler;<a name="line.51"></a>
<span class="sourceLineNo">052</span>import org.apache.mina.core.session.IoSession;<a name="line.52"></a>
<span class="sourceLineNo">053</span>import org.apache.mina.core.session.IoSessionConfig;<a name="line.53"></a>
<span class="sourceLineNo">054</span>import org.apache.mina.core.session.IoSessionRecycler;<a name="line.54"></a>
<span class="sourceLineNo">055</span>import org.apache.mina.core.write.WriteRequest;<a name="line.55"></a>
<span class="sourceLineNo">056</span>import org.apache.mina.core.write.WriteRequestQueue;<a name="line.56"></a>
<span class="sourceLineNo">057</span>import org.apache.mina.transport.socket.DatagramAcceptor;<a name="line.57"></a>
<span class="sourceLineNo">058</span>import org.apache.mina.transport.socket.DatagramSessionConfig;<a name="line.58"></a>
<span class="sourceLineNo">059</span>import org.apache.mina.transport.socket.DefaultDatagramSessionConfig;<a name="line.59"></a>
<span class="sourceLineNo">060</span>import org.apache.mina.util.ExceptionMonitor;<a name="line.60"></a>
<span class="sourceLineNo">061</span><a name="line.61"></a>
<span class="sourceLineNo">062</span>/**<a name="line.62"></a>
<span class="sourceLineNo">063</span> * {@link IoAcceptor} for datagram transport (UDP/IP).<a name="line.63"></a>
<span class="sourceLineNo">064</span> *<a name="line.64"></a>
<span class="sourceLineNo">065</span> * @author &lt;a href="http://mina.apache.org"&gt;Apache MINA Project&lt;/a&gt;<a name="line.65"></a>
<span class="sourceLineNo">066</span> * @org.apache.xbean.XBean<a name="line.66"></a>
<span class="sourceLineNo">067</span> */<a name="line.67"></a>
<span class="sourceLineNo">068</span>public final class NioDatagramAcceptor extends AbstractIoAcceptor implements DatagramAcceptor, IoProcessor&lt;NioSession&gt; {<a name="line.68"></a>
<span class="sourceLineNo">069</span>    /**<a name="line.69"></a>
<span class="sourceLineNo">070</span>     * A session recycler that is used to retrieve an existing session, unless it's too old.<a name="line.70"></a>
<span class="sourceLineNo">071</span>     **/<a name="line.71"></a>
<span class="sourceLineNo">072</span>    private static final IoSessionRecycler DEFAULT_RECYCLER = new ExpiringSessionRecycler();<a name="line.72"></a>
<span class="sourceLineNo">073</span><a name="line.73"></a>
<span class="sourceLineNo">074</span>    /**<a name="line.74"></a>
<span class="sourceLineNo">075</span>     * A timeout used for the select, as we need to get out to deal with idle<a name="line.75"></a>
<span class="sourceLineNo">076</span>     * sessions<a name="line.76"></a>
<span class="sourceLineNo">077</span>     */<a name="line.77"></a>
<span class="sourceLineNo">078</span>    private static final long SELECT_TIMEOUT = 1000L;<a name="line.78"></a>
<span class="sourceLineNo">079</span><a name="line.79"></a>
<span class="sourceLineNo">080</span>    /** A lock used to protect the selector to be waked up before it's created */<a name="line.80"></a>
<span class="sourceLineNo">081</span>    private final Semaphore lock = new Semaphore(1);<a name="line.81"></a>
<span class="sourceLineNo">082</span><a name="line.82"></a>
<span class="sourceLineNo">083</span>    /** A queue used to store the list of pending Binds */<a name="line.83"></a>
<span class="sourceLineNo">084</span>    private final Queue&lt;AcceptorOperationFuture&gt; registerQueue = new ConcurrentLinkedQueue&lt;AcceptorOperationFuture&gt;();<a name="line.84"></a>
<span class="sourceLineNo">085</span><a name="line.85"></a>
<span class="sourceLineNo">086</span>    private final Queue&lt;AcceptorOperationFuture&gt; cancelQueue = new ConcurrentLinkedQueue&lt;AcceptorOperationFuture&gt;();<a name="line.86"></a>
<span class="sourceLineNo">087</span><a name="line.87"></a>
<span class="sourceLineNo">088</span>    private final Queue&lt;NioSession&gt; flushingSessions = new ConcurrentLinkedQueue&lt;NioSession&gt;();<a name="line.88"></a>
<span class="sourceLineNo">089</span><a name="line.89"></a>
<span class="sourceLineNo">090</span>    private final Map&lt;SocketAddress, DatagramChannel&gt; boundHandles = Collections<a name="line.90"></a>
<span class="sourceLineNo">091</span>            .synchronizedMap(new HashMap&lt;SocketAddress, DatagramChannel&gt;());<a name="line.91"></a>
<span class="sourceLineNo">092</span><a name="line.92"></a>
<span class="sourceLineNo">093</span>    private IoSessionRecycler sessionRecycler = DEFAULT_RECYCLER;<a name="line.93"></a>
<span class="sourceLineNo">094</span><a name="line.94"></a>
<span class="sourceLineNo">095</span>    private final ServiceOperationFuture disposalFuture = new ServiceOperationFuture();<a name="line.95"></a>
<span class="sourceLineNo">096</span><a name="line.96"></a>
<span class="sourceLineNo">097</span>    private volatile boolean selectable;<a name="line.97"></a>
<span class="sourceLineNo">098</span><a name="line.98"></a>
<span class="sourceLineNo">099</span>    /** The thread responsible of accepting incoming requests */<a name="line.99"></a>
<span class="sourceLineNo">100</span>    private Acceptor acceptor;<a name="line.100"></a>
<span class="sourceLineNo">101</span><a name="line.101"></a>
<span class="sourceLineNo">102</span>    private long lastIdleCheckTime;<a name="line.102"></a>
<span class="sourceLineNo">103</span><a name="line.103"></a>
<span class="sourceLineNo">104</span>    /** The Selector used by this acceptor */<a name="line.104"></a>
<span class="sourceLineNo">105</span>    private volatile Selector selector;<a name="line.105"></a>
<span class="sourceLineNo">106</span><a name="line.106"></a>
<span class="sourceLineNo">107</span>    /**<a name="line.107"></a>
<span class="sourceLineNo">108</span>     * Creates a new instance.<a name="line.108"></a>
<span class="sourceLineNo">109</span>     */<a name="line.109"></a>
<span class="sourceLineNo">110</span>    public NioDatagramAcceptor() {<a name="line.110"></a>
<span class="sourceLineNo">111</span>        this(new DefaultDatagramSessionConfig(), null);<a name="line.111"></a>
<span class="sourceLineNo">112</span>    }<a name="line.112"></a>
<span class="sourceLineNo">113</span><a name="line.113"></a>
<span class="sourceLineNo">114</span>    /**<a name="line.114"></a>
<span class="sourceLineNo">115</span>     * Creates a new instance.<a name="line.115"></a>
<span class="sourceLineNo">116</span>     * <a name="line.116"></a>
<span class="sourceLineNo">117</span>     * @param executor The executor to use<a name="line.117"></a>
<span class="sourceLineNo">118</span>     */<a name="line.118"></a>
<span class="sourceLineNo">119</span>    public NioDatagramAcceptor(Executor executor) {<a name="line.119"></a>
<span class="sourceLineNo">120</span>        this(new DefaultDatagramSessionConfig(), executor);<a name="line.120"></a>
<span class="sourceLineNo">121</span>    }<a name="line.121"></a>
<span class="sourceLineNo">122</span><a name="line.122"></a>
<span class="sourceLineNo">123</span>    /**<a name="line.123"></a>
<span class="sourceLineNo">124</span>     * Creates a new instance.<a name="line.124"></a>
<span class="sourceLineNo">125</span>     */<a name="line.125"></a>
<span class="sourceLineNo">126</span>    private NioDatagramAcceptor(IoSessionConfig sessionConfig, Executor executor) {<a name="line.126"></a>
<span class="sourceLineNo">127</span>        super(sessionConfig, executor);<a name="line.127"></a>
<span class="sourceLineNo">128</span><a name="line.128"></a>
<span class="sourceLineNo">129</span>        try {<a name="line.129"></a>
<span class="sourceLineNo">130</span>            init();<a name="line.130"></a>
<span class="sourceLineNo">131</span>            selectable = true;<a name="line.131"></a>
<span class="sourceLineNo">132</span>        } catch (RuntimeException e) {<a name="line.132"></a>
<span class="sourceLineNo">133</span>            throw e;<a name="line.133"></a>
<span class="sourceLineNo">134</span>        } catch (Exception e) {<a name="line.134"></a>
<span class="sourceLineNo">135</span>            throw new RuntimeIoException("Failed to initialize.", e);<a name="line.135"></a>
<span class="sourceLineNo">136</span>        } finally {<a name="line.136"></a>
<span class="sourceLineNo">137</span>            if (!selectable) {<a name="line.137"></a>
<span class="sourceLineNo">138</span>                try {<a name="line.138"></a>
<span class="sourceLineNo">139</span>                    destroy();<a name="line.139"></a>
<span class="sourceLineNo">140</span>                } catch (Exception e) {<a name="line.140"></a>
<span class="sourceLineNo">141</span>                    ExceptionMonitor.getInstance().exceptionCaught(e);<a name="line.141"></a>
<span class="sourceLineNo">142</span>                }<a name="line.142"></a>
<span class="sourceLineNo">143</span>            }<a name="line.143"></a>
<span class="sourceLineNo">144</span>        }<a name="line.144"></a>
<span class="sourceLineNo">145</span>    }<a name="line.145"></a>
<span class="sourceLineNo">146</span><a name="line.146"></a>
<span class="sourceLineNo">147</span>    /**<a name="line.147"></a>
<span class="sourceLineNo">148</span>     * This private class is used to accept incoming connection from<a name="line.148"></a>
<span class="sourceLineNo">149</span>     * clients. It's an infinite loop, which can be stopped when all<a name="line.149"></a>
<span class="sourceLineNo">150</span>     * the registered handles have been removed (unbound).<a name="line.150"></a>
<span class="sourceLineNo">151</span>     */<a name="line.151"></a>
<span class="sourceLineNo">152</span>    private class Acceptor implements Runnable {<a name="line.152"></a>
<span class="sourceLineNo">153</span>        public void run() {<a name="line.153"></a>
<span class="sourceLineNo">154</span>            int nHandles = 0;<a name="line.154"></a>
<span class="sourceLineNo">155</span>            lastIdleCheckTime = System.currentTimeMillis();<a name="line.155"></a>
<span class="sourceLineNo">156</span><a name="line.156"></a>
<span class="sourceLineNo">157</span>            // Release the lock<a name="line.157"></a>
<span class="sourceLineNo">158</span>            lock.release();<a name="line.158"></a>
<span class="sourceLineNo">159</span><a name="line.159"></a>
<span class="sourceLineNo">160</span>            while (selectable) {<a name="line.160"></a>
<span class="sourceLineNo">161</span>                try {<a name="line.161"></a>
<span class="sourceLineNo">162</span>                    int selected = select(SELECT_TIMEOUT);<a name="line.162"></a>
<span class="sourceLineNo">163</span><a name="line.163"></a>
<span class="sourceLineNo">164</span>                    nHandles += registerHandles();<a name="line.164"></a>
<span class="sourceLineNo">165</span><a name="line.165"></a>
<span class="sourceLineNo">166</span>                    if (nHandles == 0) {<a name="line.166"></a>
<span class="sourceLineNo">167</span>                        try {<a name="line.167"></a>
<span class="sourceLineNo">168</span>                            lock.acquire();<a name="line.168"></a>
<span class="sourceLineNo">169</span><a name="line.169"></a>
<span class="sourceLineNo">170</span>                            if (registerQueue.isEmpty() &amp;&amp; cancelQueue.isEmpty()) {<a name="line.170"></a>
<span class="sourceLineNo">171</span>                                acceptor = null;<a name="line.171"></a>
<span class="sourceLineNo">172</span>                                break;<a name="line.172"></a>
<span class="sourceLineNo">173</span>                            }<a name="line.173"></a>
<span class="sourceLineNo">174</span>                        } finally {<a name="line.174"></a>
<span class="sourceLineNo">175</span>                            lock.release();<a name="line.175"></a>
<span class="sourceLineNo">176</span>                        }<a name="line.176"></a>
<span class="sourceLineNo">177</span>                    }<a name="line.177"></a>
<span class="sourceLineNo">178</span><a name="line.178"></a>
<span class="sourceLineNo">179</span>                    if (selected &gt; 0) {<a name="line.179"></a>
<span class="sourceLineNo">180</span>                        processReadySessions(selectedHandles());<a name="line.180"></a>
<span class="sourceLineNo">181</span>                    }<a name="line.181"></a>
<span class="sourceLineNo">182</span><a name="line.182"></a>
<span class="sourceLineNo">183</span>                    long currentTime = System.currentTimeMillis();<a name="line.183"></a>
<span class="sourceLineNo">184</span>                    flushSessions(currentTime);<a name="line.184"></a>
<span class="sourceLineNo">185</span>                    nHandles -= unregisterHandles();<a name="line.185"></a>
<span class="sourceLineNo">186</span><a name="line.186"></a>
<span class="sourceLineNo">187</span>                    notifyIdleSessions(currentTime);<a name="line.187"></a>
<span class="sourceLineNo">188</span>                } catch (ClosedSelectorException cse) {<a name="line.188"></a>
<span class="sourceLineNo">189</span>                    // If the selector has been closed, we can exit the loop<a name="line.189"></a>
<span class="sourceLineNo">190</span>                    ExceptionMonitor.getInstance().exceptionCaught(cse);<a name="line.190"></a>
<span class="sourceLineNo">191</span>                    break;<a name="line.191"></a>
<span class="sourceLineNo">192</span>                } catch (Exception e) {<a name="line.192"></a>
<span class="sourceLineNo">193</span>                    ExceptionMonitor.getInstance().exceptionCaught(e);<a name="line.193"></a>
<span class="sourceLineNo">194</span><a name="line.194"></a>
<span class="sourceLineNo">195</span>                    try {<a name="line.195"></a>
<span class="sourceLineNo">196</span>                        Thread.sleep(1000);<a name="line.196"></a>
<span class="sourceLineNo">197</span>                    } catch (InterruptedException e1) {<a name="line.197"></a>
<span class="sourceLineNo">198</span>                    }<a name="line.198"></a>
<span class="sourceLineNo">199</span>                }<a name="line.199"></a>
<span class="sourceLineNo">200</span>            }<a name="line.200"></a>
<span class="sourceLineNo">201</span><a name="line.201"></a>
<span class="sourceLineNo">202</span>            if (selectable &amp;&amp; isDisposing()) {<a name="line.202"></a>
<span class="sourceLineNo">203</span>                selectable = false;<a name="line.203"></a>
<span class="sourceLineNo">204</span>                try {<a name="line.204"></a>
<span class="sourceLineNo">205</span>                    destroy();<a name="line.205"></a>
<span class="sourceLineNo">206</span>                } catch (Exception e) {<a name="line.206"></a>
<span class="sourceLineNo">207</span>                    ExceptionMonitor.getInstance().exceptionCaught(e);<a name="line.207"></a>
<span class="sourceLineNo">208</span>                } finally {<a name="line.208"></a>
<span class="sourceLineNo">209</span>                    disposalFuture.setValue(true);<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>        }<a name="line.212"></a>
<span class="sourceLineNo">213</span>    }<a name="line.213"></a>
<span class="sourceLineNo">214</span><a name="line.214"></a>
<span class="sourceLineNo">215</span>    private int registerHandles() {<a name="line.215"></a>
<span class="sourceLineNo">216</span>        for (;;) {<a name="line.216"></a>
<span class="sourceLineNo">217</span>            AcceptorOperationFuture req = registerQueue.poll();<a name="line.217"></a>
<span class="sourceLineNo">218</span><a name="line.218"></a>
<span class="sourceLineNo">219</span>            if (req == null) {<a name="line.219"></a>
<span class="sourceLineNo">220</span>                break;<a name="line.220"></a>
<span class="sourceLineNo">221</span>            }<a name="line.221"></a>
<span class="sourceLineNo">222</span><a name="line.222"></a>
<span class="sourceLineNo">223</span>            Map&lt;SocketAddress, DatagramChannel&gt; newHandles = new HashMap&lt;SocketAddress, DatagramChannel&gt;();<a name="line.223"></a>
<span class="sourceLineNo">224</span>            List&lt;SocketAddress&gt; localAddresses = req.getLocalAddresses();<a name="line.224"></a>
<span class="sourceLineNo">225</span><a name="line.225"></a>
<span class="sourceLineNo">226</span>            try {<a name="line.226"></a>
<span class="sourceLineNo">227</span>                for (SocketAddress socketAddress : localAddresses) {<a name="line.227"></a>
<span class="sourceLineNo">228</span>                    DatagramChannel handle = open(socketAddress);<a name="line.228"></a>
<span class="sourceLineNo">229</span>                    newHandles.put(localAddress(handle), handle);<a name="line.229"></a>
<span class="sourceLineNo">230</span>                }<a name="line.230"></a>
<span class="sourceLineNo">231</span><a name="line.231"></a>
<span class="sourceLineNo">232</span>                boundHandles.putAll(newHandles);<a name="line.232"></a>
<span class="sourceLineNo">233</span><a name="line.233"></a>
<span class="sourceLineNo">234</span>                getListeners().fireServiceActivated();<a name="line.234"></a>
<span class="sourceLineNo">235</span>                req.setDone();<a name="line.235"></a>
<span class="sourceLineNo">236</span><a name="line.236"></a>
<span class="sourceLineNo">237</span>                return newHandles.size();<a name="line.237"></a>
<span class="sourceLineNo">238</span>            } catch (Exception e) {<a name="line.238"></a>
<span class="sourceLineNo">239</span>                req.setException(e);<a name="line.239"></a>
<span class="sourceLineNo">240</span>            } finally {<a name="line.240"></a>
<span class="sourceLineNo">241</span>                // Roll back if failed to bind all addresses.<a name="line.241"></a>
<span class="sourceLineNo">242</span>                if (req.getException() != null) {<a name="line.242"></a>
<span class="sourceLineNo">243</span>                    for (DatagramChannel handle : newHandles.values()) {<a name="line.243"></a>
<span class="sourceLineNo">244</span>                        try {<a name="line.244"></a>
<span class="sourceLineNo">245</span>                            close(handle);<a name="line.245"></a>
<span class="sourceLineNo">246</span>                        } catch (Exception e) {<a name="line.246"></a>
<span class="sourceLineNo">247</span>                            ExceptionMonitor.getInstance().exceptionCaught(e);<a name="line.247"></a>
<span class="sourceLineNo">248</span>                        }<a name="line.248"></a>
<span class="sourceLineNo">249</span>                    }<a name="line.249"></a>
<span class="sourceLineNo">250</span><a name="line.250"></a>
<span class="sourceLineNo">251</span>                    wakeup();<a name="line.251"></a>
<span class="sourceLineNo">252</span>                }<a name="line.252"></a>
<span class="sourceLineNo">253</span>            }<a name="line.253"></a>
<span class="sourceLineNo">254</span>        }<a name="line.254"></a>
<span class="sourceLineNo">255</span><a name="line.255"></a>
<span class="sourceLineNo">256</span>        return 0;<a name="line.256"></a>
<span class="sourceLineNo">257</span>    }<a name="line.257"></a>
<span class="sourceLineNo">258</span><a name="line.258"></a>
<span class="sourceLineNo">259</span>    private void processReadySessions(Set&lt;SelectionKey&gt; handles) {<a name="line.259"></a>
<span class="sourceLineNo">260</span>        Iterator&lt;SelectionKey&gt; iterator = handles.iterator();<a name="line.260"></a>
<span class="sourceLineNo">261</span><a name="line.261"></a>
<span class="sourceLineNo">262</span>        while (iterator.hasNext()) {<a name="line.262"></a>
<span class="sourceLineNo">263</span>            SelectionKey key = iterator.next();<a name="line.263"></a>
<span class="sourceLineNo">264</span>            DatagramChannel handle = (DatagramChannel) key.channel();<a name="line.264"></a>
<span class="sourceLineNo">265</span>            iterator.remove();<a name="line.265"></a>
<span class="sourceLineNo">266</span><a name="line.266"></a>
<span class="sourceLineNo">267</span>            try {<a name="line.267"></a>
<span class="sourceLineNo">268</span>                if (key.isValid() &amp;&amp; key.isReadable()) {<a name="line.268"></a>
<span class="sourceLineNo">269</span>                    readHandle(handle);<a name="line.269"></a>
<span class="sourceLineNo">270</span>                }<a name="line.270"></a>
<span class="sourceLineNo">271</span><a name="line.271"></a>
<span class="sourceLineNo">272</span>                if (key.isValid() &amp;&amp; key.isWritable()) {<a name="line.272"></a>
<span class="sourceLineNo">273</span>                    for (IoSession session : getManagedSessions().values()) {<a name="line.273"></a>
<span class="sourceLineNo">274</span>                        scheduleFlush((NioSession) session);<a name="line.274"></a>
<span class="sourceLineNo">275</span>                    }<a name="line.275"></a>
<span class="sourceLineNo">276</span>                }<a name="line.276"></a>
<span class="sourceLineNo">277</span>            } catch (Exception e) {<a name="line.277"></a>
<span class="sourceLineNo">278</span>                ExceptionMonitor.getInstance().exceptionCaught(e);<a name="line.278"></a>
<span class="sourceLineNo">279</span>            }<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><a name="line.282"></a>
<span class="sourceLineNo">283</span>    private boolean scheduleFlush(NioSession session) {<a name="line.283"></a>
<span class="sourceLineNo">284</span>        // Set the schedule for flush flag if the session<a name="line.284"></a>
<span class="sourceLineNo">285</span>        // has not already be added to the flushingSessions<a name="line.285"></a>
<span class="sourceLineNo">286</span>        // queue<a name="line.286"></a>
<span class="sourceLineNo">287</span>        if (session.setScheduledForFlush(true)) {<a name="line.287"></a>
<span class="sourceLineNo">288</span>            flushingSessions.add(session);<a name="line.288"></a>
<span class="sourceLineNo">289</span>            return true;<a name="line.289"></a>
<span class="sourceLineNo">290</span>        } else {<a name="line.290"></a>
<span class="sourceLineNo">291</span>            return false;<a name="line.291"></a>
<span class="sourceLineNo">292</span>        }<a name="line.292"></a>
<span class="sourceLineNo">293</span>    }<a name="line.293"></a>
<span class="sourceLineNo">294</span><a name="line.294"></a>
<span class="sourceLineNo">295</span>    private void readHandle(DatagramChannel handle) throws Exception {<a name="line.295"></a>
<span class="sourceLineNo">296</span>        IoBuffer readBuf = IoBuffer.allocate(getSessionConfig().getReadBufferSize());<a name="line.296"></a>
<span class="sourceLineNo">297</span><a name="line.297"></a>
<span class="sourceLineNo">298</span>        SocketAddress remoteAddress = receive(handle, readBuf);<a name="line.298"></a>
<span class="sourceLineNo">299</span><a name="line.299"></a>
<span class="sourceLineNo">300</span>        if (remoteAddress != null) {<a name="line.300"></a>
<span class="sourceLineNo">301</span>            IoSession session = newSessionWithoutLock(remoteAddress, localAddress(handle));<a name="line.301"></a>
<span class="sourceLineNo">302</span><a name="line.302"></a>
<span class="sourceLineNo">303</span>            readBuf.flip();<a name="line.303"></a>
<span class="sourceLineNo">304</span><a name="line.304"></a>
<span class="sourceLineNo">305</span>            session.getFilterChain().fireMessageReceived(readBuf);<a name="line.305"></a>
<span class="sourceLineNo">306</span>        }<a name="line.306"></a>
<span class="sourceLineNo">307</span>    }<a name="line.307"></a>
<span class="sourceLineNo">308</span><a name="line.308"></a>
<span class="sourceLineNo">309</span>    private IoSession newSessionWithoutLock(SocketAddress remoteAddress, SocketAddress localAddress) throws Exception {<a name="line.309"></a>
<span class="sourceLineNo">310</span>        DatagramChannel handle = boundHandles.get(localAddress);<a name="line.310"></a>
<span class="sourceLineNo">311</span><a name="line.311"></a>
<span class="sourceLineNo">312</span>        if (handle == null) {<a name="line.312"></a>
<span class="sourceLineNo">313</span>            throw new IllegalArgumentException("Unknown local address: " + localAddress);<a name="line.313"></a>
<span class="sourceLineNo">314</span>        }<a name="line.314"></a>
<span class="sourceLineNo">315</span><a name="line.315"></a>
<span class="sourceLineNo">316</span>        IoSession session;<a name="line.316"></a>
<span class="sourceLineNo">317</span><a name="line.317"></a>
<span class="sourceLineNo">318</span>        synchronized (sessionRecycler) {<a name="line.318"></a>
<span class="sourceLineNo">319</span>            session = sessionRecycler.recycle(remoteAddress);<a name="line.319"></a>
<span class="sourceLineNo">320</span><a name="line.320"></a>
<span class="sourceLineNo">321</span>            if (session != null) {<a name="line.321"></a>
<span class="sourceLineNo">322</span>                return session;<a name="line.322"></a>
<span class="sourceLineNo">323</span>            }<a name="line.323"></a>
<span class="sourceLineNo">324</span><a name="line.324"></a>
<span class="sourceLineNo">325</span>            // If a new session needs to be created.<a name="line.325"></a>
<span class="sourceLineNo">326</span>            NioSession newSession = newSession(this, handle, remoteAddress);<a name="line.326"></a>
<span class="sourceLineNo">327</span>            getSessionRecycler().put(newSession);<a name="line.327"></a>
<span class="sourceLineNo">328</span>            session = newSession;<a name="line.328"></a>
<span class="sourceLineNo">329</span>        }<a name="line.329"></a>
<span class="sourceLineNo">330</span><a name="line.330"></a>
<span class="sourceLineNo">331</span>        initSession(session, null, null);<a name="line.331"></a>
<span class="sourceLineNo">332</span><a name="line.332"></a>
<span class="sourceLineNo">333</span>        try {<a name="line.333"></a>
<span class="sourceLineNo">334</span>            this.getFilterChainBuilder().buildFilterChain(session.getFilterChain());<a name="line.334"></a>
<span class="sourceLineNo">335</span>            getListeners().fireSessionCreated(session);<a name="line.335"></a>
<span class="sourceLineNo">336</span>        } catch (Exception e) {<a name="line.336"></a>
<span class="sourceLineNo">337</span>            ExceptionMonitor.getInstance().exceptionCaught(e);<a name="line.337"></a>
<span class="sourceLineNo">338</span>        }<a name="line.338"></a>
<span class="sourceLineNo">339</span><a name="line.339"></a>
<span class="sourceLineNo">340</span>        return session;<a name="line.340"></a>
<span class="sourceLineNo">341</span>    }<a name="line.341"></a>
<span class="sourceLineNo">342</span><a name="line.342"></a>
<span class="sourceLineNo">343</span>    private void flushSessions(long currentTime) {<a name="line.343"></a>
<span class="sourceLineNo">344</span>        for (;;) {<a name="line.344"></a>
<span class="sourceLineNo">345</span>            NioSession session = flushingSessions.poll();<a name="line.345"></a>
<span class="sourceLineNo">346</span><a name="line.346"></a>
<span class="sourceLineNo">347</span>            if (session == null) {<a name="line.347"></a>
<span class="sourceLineNo">348</span>                break;<a name="line.348"></a>
<span class="sourceLineNo">349</span>            }<a name="line.349"></a>
<span class="sourceLineNo">350</span><a name="line.350"></a>
<span class="sourceLineNo">351</span>            // Reset the Schedule for flush flag for this session,<a name="line.351"></a>
<span class="sourceLineNo">352</span>            // as we are flushing it now<a name="line.352"></a>
<span class="sourceLineNo">353</span>            session.unscheduledForFlush();<a name="line.353"></a>
<span class="sourceLineNo">354</span><a name="line.354"></a>
<span class="sourceLineNo">355</span>            try {<a name="line.355"></a>
<span class="sourceLineNo">356</span>                boolean flushedAll = flush(session, currentTime);<a name="line.356"></a>
<span class="sourceLineNo">357</span><a name="line.357"></a>
<span class="sourceLineNo">358</span>                if (flushedAll &amp;&amp; !session.getWriteRequestQueue().isEmpty(session) &amp;&amp; !session.isScheduledForFlush()) {<a name="line.358"></a>
<span class="sourceLineNo">359</span>                    scheduleFlush(session);<a name="line.359"></a>
<span class="sourceLineNo">360</span>                }<a name="line.360"></a>
<span class="sourceLineNo">361</span>            } catch (Exception e) {<a name="line.361"></a>
<span class="sourceLineNo">362</span>                session.getFilterChain().fireExceptionCaught(e);<a name="line.362"></a>
<span class="sourceLineNo">363</span>            }<a name="line.363"></a>
<span class="sourceLineNo">364</span>        }<a name="line.364"></a>
<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
<span class="sourceLineNo">366</span><a name="line.366"></a>
<span class="sourceLineNo">367</span>    private boolean flush(NioSession session, long currentTime) throws Exception {<a name="line.367"></a>
<span class="sourceLineNo">368</span>        final WriteRequestQueue writeRequestQueue = session.getWriteRequestQueue();<a name="line.368"></a>
<span class="sourceLineNo">369</span>        final int maxWrittenBytes = session.getConfig().getMaxReadBufferSize()<a name="line.369"></a>
<span class="sourceLineNo">370</span>                + (session.getConfig().getMaxReadBufferSize() &gt;&gt;&gt; 1);<a name="line.370"></a>
<span class="sourceLineNo">371</span><a name="line.371"></a>
<span class="sourceLineNo">372</span>        int writtenBytes = 0;<a name="line.372"></a>
<span class="sourceLineNo">373</span><a name="line.373"></a>
<span class="sourceLineNo">374</span>        try {<a name="line.374"></a>
<span class="sourceLineNo">375</span>            for (;;) {<a name="line.375"></a>
<span class="sourceLineNo">376</span>                WriteRequest req = session.getCurrentWriteRequest();<a name="line.376"></a>
<span class="sourceLineNo">377</span><a name="line.377"></a>
<span class="sourceLineNo">378</span>                if (req == null) {<a name="line.378"></a>
<span class="sourceLineNo">379</span>                    req = writeRequestQueue.poll(session);<a name="line.379"></a>
<span class="sourceLineNo">380</span><a name="line.380"></a>
<span class="sourceLineNo">381</span>                    if (req == null) {<a name="line.381"></a>
<span class="sourceLineNo">382</span>                        setInterestedInWrite(session, false);<a name="line.382"></a>
<span class="sourceLineNo">383</span>                        break;<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>                    session.setCurrentWriteRequest(req);<a name="line.386"></a>
<span class="sourceLineNo">387</span>                }<a name="line.387"></a>
<span class="sourceLineNo">388</span><a name="line.388"></a>
<span class="sourceLineNo">389</span>                IoBuffer buf = (IoBuffer) req.getMessage();<a name="line.389"></a>
<span class="sourceLineNo">390</span><a name="line.390"></a>
<span class="sourceLineNo">391</span>                if (buf.remaining() == 0) {<a name="line.391"></a>
<span class="sourceLineNo">392</span>                    // Clear and fire event<a name="line.392"></a>
<span class="sourceLineNo">393</span>                    session.setCurrentWriteRequest(null);<a name="line.393"></a>
<span class="sourceLineNo">394</span>                    buf.reset();<a name="line.394"></a>
<span class="sourceLineNo">395</span>                    session.getFilterChain().fireMessageSent(req);<a name="line.395"></a>
<span class="sourceLineNo">396</span>                    continue;<a name="line.396"></a>
<span class="sourceLineNo">397</span>                }<a name="line.397"></a>
<span class="sourceLineNo">398</span><a name="line.398"></a>
<span class="sourceLineNo">399</span>                SocketAddress destination = req.getDestination();<a name="line.399"></a>
<span class="sourceLineNo">400</span><a name="line.400"></a>
<span class="sourceLineNo">401</span>                if (destination == null) {<a name="line.401"></a>
<span class="sourceLineNo">402</span>                    destination = session.getRemoteAddress();<a name="line.402"></a>
<span class="sourceLineNo">403</span>                }<a name="line.403"></a>
<span class="sourceLineNo">404</span><a name="line.404"></a>
<span class="sourceLineNo">405</span>                int localWrittenBytes = send(session, buf, destination);<a name="line.405"></a>
<span class="sourceLineNo">406</span><a name="line.406"></a>
<span class="sourceLineNo">407</span>                if ((localWrittenBytes == 0) || (writtenBytes &gt;= maxWrittenBytes)) {<a name="line.407"></a>
<span class="sourceLineNo">408</span>                    // Kernel buffer is full or wrote too much<a name="line.408"></a>
<span class="sourceLineNo">409</span>                    setInterestedInWrite(session, true);<a name="line.409"></a>
<span class="sourceLineNo">410</span><a name="line.410"></a>
<span class="sourceLineNo">411</span>                    return false;<a name="line.411"></a>
<span class="sourceLineNo">412</span>                } else {<a name="line.412"></a>
<span class="sourceLineNo">413</span>                    setInterestedInWrite(session, false);<a name="line.413"></a>
<span class="sourceLineNo">414</span><a name="line.414"></a>
<span class="sourceLineNo">415</span>                    // Clear and fire event<a name="line.415"></a>
<span class="sourceLineNo">416</span>                    session.setCurrentWriteRequest(null);<a name="line.416"></a>
<span class="sourceLineNo">417</span>                    writtenBytes += localWrittenBytes;<a name="line.417"></a>
<span class="sourceLineNo">418</span>                    buf.reset();<a name="line.418"></a>
<span class="sourceLineNo">419</span>                    session.getFilterChain().fireMessageSent(req);<a name="line.419"></a>
<span class="sourceLineNo">420</span>                }<a name="line.420"></a>
<span class="sourceLineNo">421</span>            }<a name="line.421"></a>
<span class="sourceLineNo">422</span>        } finally {<a name="line.422"></a>
<span class="sourceLineNo">423</span>            session.increaseWrittenBytes(writtenBytes, currentTime);<a name="line.423"></a>
<span class="sourceLineNo">424</span>        }<a name="line.424"></a>
<span class="sourceLineNo">425</span><a name="line.425"></a>
<span class="sourceLineNo">426</span>        return true;<a name="line.426"></a>
<span class="sourceLineNo">427</span>    }<a name="line.427"></a>
<span class="sourceLineNo">428</span><a name="line.428"></a>
<span class="sourceLineNo">429</span>    private int unregisterHandles() {<a name="line.429"></a>
<span class="sourceLineNo">430</span>        int nHandles = 0;<a name="line.430"></a>
<span class="sourceLineNo">431</span><a name="line.431"></a>
<span class="sourceLineNo">432</span>        for (;;) {<a name="line.432"></a>
<span class="sourceLineNo">433</span>            AcceptorOperationFuture request = cancelQueue.poll();<a name="line.433"></a>
<span class="sourceLineNo">434</span>            if (request == null) {<a name="line.434"></a>
<span class="sourceLineNo">435</span>                break;<a name="line.435"></a>
<span class="sourceLineNo">436</span>            }<a name="line.436"></a>
<span class="sourceLineNo">437</span><a name="line.437"></a>
<span class="sourceLineNo">438</span>            // close the channels<a name="line.438"></a>
<span class="sourceLineNo">439</span>            for (SocketAddress socketAddress : request.getLocalAddresses()) {<a name="line.439"></a>
<span class="sourceLineNo">440</span>                DatagramChannel handle = boundHandles.remove(socketAddress);<a name="line.440"></a>
<span class="sourceLineNo">441</span><a name="line.441"></a>
<span class="sourceLineNo">442</span>                if (handle == null) {<a name="line.442"></a>
<span class="sourceLineNo">443</span>                    continue;<a name="line.443"></a>
<span class="sourceLineNo">444</span>                }<a name="line.444"></a>
<span class="sourceLineNo">445</span><a name="line.445"></a>
<span class="sourceLineNo">446</span>                try {<a name="line.446"></a>
<span class="sourceLineNo">447</span>                    close(handle);<a name="line.447"></a>
<span class="sourceLineNo">448</span>                    wakeup(); // wake up again to trigger thread death<a name="line.448"></a>
<span class="sourceLineNo">449</span>                } catch (Exception e) {<a name="line.449"></a>
<span class="sourceLineNo">450</span>                    ExceptionMonitor.getInstance().exceptionCaught(e);<a name="line.450"></a>
<span class="sourceLineNo">451</span>                } finally {<a name="line.451"></a>
<span class="sourceLineNo">452</span>                    nHandles++;<a name="line.452"></a>
<span class="sourceLineNo">453</span>                }<a name="line.453"></a>
<span class="sourceLineNo">454</span>            }<a name="line.454"></a>
<span class="sourceLineNo">455</span><a name="line.455"></a>
<span class="sourceLineNo">456</span>            request.setDone();<a name="line.456"></a>
<span class="sourceLineNo">457</span>        }<a name="line.457"></a>
<span class="sourceLineNo">458</span><a name="line.458"></a>
<span class="sourceLineNo">459</span>        return nHandles;<a name="line.459"></a>
<span class="sourceLineNo">460</span>    }<a name="line.460"></a>
<span class="sourceLineNo">461</span><a name="line.461"></a>
<span class="sourceLineNo">462</span>    private void notifyIdleSessions(long currentTime) {<a name="line.462"></a>
<span class="sourceLineNo">463</span>        // process idle sessions<a name="line.463"></a>
<span class="sourceLineNo">464</span>        if (currentTime - lastIdleCheckTime &gt;= 1000) {<a name="line.464"></a>
<span class="sourceLineNo">465</span>            lastIdleCheckTime = currentTime;<a name="line.465"></a>
<span class="sourceLineNo">466</span>            AbstractIoSession.notifyIdleness(getListeners().getManagedSessions().values().iterator(), currentTime);<a name="line.466"></a>
<span class="sourceLineNo">467</span>        }<a name="line.467"></a>
<span class="sourceLineNo">468</span>    }<a name="line.468"></a>
<span class="sourceLineNo">469</span><a name="line.469"></a>
<span class="sourceLineNo">470</span>    /**<a name="line.470"></a>
<span class="sourceLineNo">471</span>     * Starts the inner Acceptor thread.<a name="line.471"></a>
<span class="sourceLineNo">472</span>     */<a name="line.472"></a>
<span class="sourceLineNo">473</span>    private void startupAcceptor() throws InterruptedException {<a name="line.473"></a>
<span class="sourceLineNo">474</span>        if (!selectable) {<a name="line.474"></a>
<span class="sourceLineNo">475</span>            registerQueue.clear();<a name="line.475"></a>
<span class="sourceLineNo">476</span>            cancelQueue.clear();<a name="line.476"></a>
<span class="sourceLineNo">477</span>            flushingSessions.clear();<a name="line.477"></a>
<span class="sourceLineNo">478</span>        }<a name="line.478"></a>
<span class="sourceLineNo">479</span><a name="line.479"></a>
<span class="sourceLineNo">480</span>        lock.acquire();<a name="line.480"></a>
<span class="sourceLineNo">481</span><a name="line.481"></a>
<span class="sourceLineNo">482</span>        if (acceptor == null) {<a name="line.482"></a>
<span class="sourceLineNo">483</span>            acceptor = new Acceptor();<a name="line.483"></a>
<span class="sourceLineNo">484</span>            executeWorker(acceptor);<a name="line.484"></a>
<span class="sourceLineNo">485</span>        } else {<a name="line.485"></a>
<span class="sourceLineNo">486</span>            lock.release();<a name="line.486"></a>
<span class="sourceLineNo">487</span>        }<a name="line.487"></a>
<span class="sourceLineNo">488</span>    }<a name="line.488"></a>
<span class="sourceLineNo">489</span><a name="line.489"></a>
<span class="sourceLineNo">490</span>    protected void init() throws Exception {<a name="line.490"></a>
<span class="sourceLineNo">491</span>        this.selector = Selector.open();<a name="line.491"></a>
<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
<span class="sourceLineNo">493</span><a name="line.493"></a>
<span class="sourceLineNo">494</span>    /**<a name="line.494"></a>
<span class="sourceLineNo">495</span>     * {@inheritDoc}<a name="line.495"></a>
<span class="sourceLineNo">496</span>     */<a name="line.496"></a>
<span class="sourceLineNo">497</span>    public void add(NioSession session) {<a name="line.497"></a>
<span class="sourceLineNo">498</span>        // Nothing to do for UDP<a name="line.498"></a>
<span class="sourceLineNo">499</span>    }<a name="line.499"></a>
<span class="sourceLineNo">500</span><a name="line.500"></a>
<span class="sourceLineNo">501</span>    /**<a name="line.501"></a>
<span class="sourceLineNo">502</span>     * {@inheritDoc}<a name="line.502"></a>
<span class="sourceLineNo">503</span>     */<a name="line.503"></a>
<span class="sourceLineNo">504</span>    @Override<a name="line.504"></a>
<span class="sourceLineNo">505</span>    protected final Set&lt;SocketAddress&gt; bindInternal(List&lt;? extends SocketAddress&gt; localAddresses) throws Exception {<a name="line.505"></a>
<span class="sourceLineNo">506</span>        // Create a bind request as a Future operation. When the selector<a name="line.506"></a>
<span class="sourceLineNo">507</span>        // have handled the registration, it will signal this future.<a name="line.507"></a>
<span class="sourceLineNo">508</span>        AcceptorOperationFuture request = new AcceptorOperationFuture(localAddresses);<a name="line.508"></a>
<span class="sourceLineNo">509</span><a name="line.509"></a>
<span class="sourceLineNo">510</span>        // adds the Registration request to the queue for the Workers<a name="line.510"></a>
<span class="sourceLineNo">511</span>        // to handle<a name="line.511"></a>
<span class="sourceLineNo">512</span>        registerQueue.add(request);<a name="line.512"></a>
<span class="sourceLineNo">513</span><a name="line.513"></a>
<span class="sourceLineNo">514</span>        // creates the Acceptor instance and has the local<a name="line.514"></a>
<span class="sourceLineNo">515</span>        // executor kick it off.<a name="line.515"></a>
<span class="sourceLineNo">516</span>        startupAcceptor();<a name="line.516"></a>
<span class="sourceLineNo">517</span><a name="line.517"></a>
<span class="sourceLineNo">518</span>        // As we just started the acceptor, we have to unblock the select()<a name="line.518"></a>
<span class="sourceLineNo">519</span>        // in order to process the bind request we just have added to the<a name="line.519"></a>
<span class="sourceLineNo">520</span>        // registerQueue.<a name="line.520"></a>
<span class="sourceLineNo">521</span>        try {<a name="line.521"></a>
<span class="sourceLineNo">522</span>            lock.acquire();<a name="line.522"></a>
<span class="sourceLineNo">523</span><a name="line.523"></a>
<span class="sourceLineNo">524</span>            // Wait a bit to give a chance to the Acceptor thread to do the select()<a name="line.524"></a>
<span class="sourceLineNo">525</span>            Thread.sleep(10);<a name="line.525"></a>
<span class="sourceLineNo">526</span>            wakeup();<a name="line.526"></a>
<span class="sourceLineNo">527</span>        } finally {<a name="line.527"></a>
<span class="sourceLineNo">528</span>            lock.release();<a name="line.528"></a>
<span class="sourceLineNo">529</span>        }<a name="line.529"></a>
<span class="sourceLineNo">530</span><a name="line.530"></a>
<span class="sourceLineNo">531</span>        // Now, we wait until this request is completed.<a name="line.531"></a>
<span class="sourceLineNo">532</span>        request.awaitUninterruptibly();<a name="line.532"></a>
<span class="sourceLineNo">533</span><a name="line.533"></a>
<span class="sourceLineNo">534</span>        if (request.getException() != null) {<a name="line.534"></a>
<span class="sourceLineNo">535</span>            throw request.getException();<a name="line.535"></a>
<span class="sourceLineNo">536</span>        }<a name="line.536"></a>
<span class="sourceLineNo">537</span><a name="line.537"></a>
<span class="sourceLineNo">538</span>        // Update the local addresses.<a name="line.538"></a>
<span class="sourceLineNo">539</span>        // setLocalAddresses() shouldn't be called from the worker thread<a name="line.539"></a>
<span class="sourceLineNo">540</span>        // because of deadlock.<a name="line.540"></a>
<span class="sourceLineNo">541</span>        Set&lt;SocketAddress&gt; newLocalAddresses = new HashSet&lt;SocketAddress&gt;();<a name="line.541"></a>
<span class="sourceLineNo">542</span><a name="line.542"></a>
<span class="sourceLineNo">543</span>        for (DatagramChannel handle : boundHandles.values()) {<a name="line.543"></a>
<span class="sourceLineNo">544</span>            newLocalAddresses.add(localAddress(handle));<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>        return newLocalAddresses;<a name="line.547"></a>
<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
<span class="sourceLineNo">549</span><a name="line.549"></a>
<span class="sourceLineNo">550</span>    protected void close(DatagramChannel handle) throws Exception {<a name="line.550"></a>
<span class="sourceLineNo">551</span>        SelectionKey key = handle.keyFor(selector);<a name="line.551"></a>
<span class="sourceLineNo">552</span><a name="line.552"></a>
<span class="sourceLineNo">553</span>        if (key != null) {<a name="line.553"></a>
<span class="sourceLineNo">554</span>            key.cancel();<a name="line.554"></a>
<span class="sourceLineNo">555</span>        }<a name="line.555"></a>
<span class="sourceLineNo">556</span><a name="line.556"></a>
<span class="sourceLineNo">557</span>        handle.disconnect();<a name="line.557"></a>
<span class="sourceLineNo">558</span>        handle.close();<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>    protected void destroy() throws Exception {<a name="line.561"></a>
<span class="sourceLineNo">562</span>        if (selector != null) {<a name="line.562"></a>
<span class="sourceLineNo">563</span>            selector.close();<a name="line.563"></a>
<span class="sourceLineNo">564</span>        }<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>     * {@inheritDoc}<a name="line.568"></a>
<span class="sourceLineNo">569</span>     */<a name="line.569"></a>
<span class="sourceLineNo">570</span>    @Override<a name="line.570"></a>
<span class="sourceLineNo">571</span>    protected void dispose0() throws Exception {<a name="line.571"></a>
<span class="sourceLineNo">572</span>        unbind();<a name="line.572"></a>
<span class="sourceLineNo">573</span>        startupAcceptor();<a name="line.573"></a>
<span class="sourceLineNo">574</span>        wakeup();<a name="line.574"></a>
<span class="sourceLineNo">575</span>    }<a name="line.575"></a>
<span class="sourceLineNo">576</span><a name="line.576"></a>
<span class="sourceLineNo">577</span>    /**<a name="line.577"></a>
<span class="sourceLineNo">578</span>     * {@inheritDoc}<a name="line.578"></a>
<span class="sourceLineNo">579</span>     */<a name="line.579"></a>
<span class="sourceLineNo">580</span>    public void flush(NioSession session) {<a name="line.580"></a>
<span class="sourceLineNo">581</span>        if (scheduleFlush(session)) {<a name="line.581"></a>
<span class="sourceLineNo">582</span>            wakeup();<a name="line.582"></a>
<span class="sourceLineNo">583</span>        }<a name="line.583"></a>
<span class="sourceLineNo">584</span>    }<a name="line.584"></a>
<span class="sourceLineNo">585</span><a name="line.585"></a>
<span class="sourceLineNo">586</span>    @Override<a name="line.586"></a>
<span class="sourceLineNo">587</span>    public InetSocketAddress getDefaultLocalAddress() {<a name="line.587"></a>
<span class="sourceLineNo">588</span>        return (InetSocketAddress) super.getDefaultLocalAddress();<a name="line.588"></a>
<span class="sourceLineNo">589</span>    }<a name="line.589"></a>
<span class="sourceLineNo">590</span><a name="line.590"></a>
<span class="sourceLineNo">591</span>    @Override<a name="line.591"></a>
<span class="sourceLineNo">592</span>    public InetSocketAddress getLocalAddress() {<a name="line.592"></a>
<span class="sourceLineNo">593</span>        return (InetSocketAddress) super.getLocalAddress();<a name="line.593"></a>
<span class="sourceLineNo">594</span>    }<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>     * {@inheritDoc}<a name="line.597"></a>
<span class="sourceLineNo">598</span>     */<a name="line.598"></a>
<span class="sourceLineNo">599</span>    public DatagramSessionConfig getSessionConfig() {<a name="line.599"></a>
<span class="sourceLineNo">600</span>        return (DatagramSessionConfig) sessionConfig;<a name="line.600"></a>
<span class="sourceLineNo">601</span>    }<a name="line.601"></a>
<span class="sourceLineNo">602</span><a name="line.602"></a>
<span class="sourceLineNo">603</span>    public final IoSessionRecycler getSessionRecycler() {<a name="line.603"></a>
<span class="sourceLineNo">604</span>        return sessionRecycler;<a name="line.604"></a>
<span class="sourceLineNo">605</span>    }<a name="line.605"></a>
<span class="sourceLineNo">606</span><a name="line.606"></a>
<span class="sourceLineNo">607</span>    public TransportMetadata getTransportMetadata() {<a name="line.607"></a>
<span class="sourceLineNo">608</span>        return NioDatagramSession.METADATA;<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>    protected boolean isReadable(DatagramChannel handle) {<a name="line.611"></a>
<span class="sourceLineNo">612</span>        SelectionKey key = handle.keyFor(selector);<a name="line.612"></a>
<span class="sourceLineNo">613</span><a name="line.613"></a>
<span class="sourceLineNo">614</span>        if ((key == null) || (!key.isValid())) {<a name="line.614"></a>
<span class="sourceLineNo">615</span>            return false;<a name="line.615"></a>
<span class="sourceLineNo">616</span>        }<a name="line.616"></a>
<span class="sourceLineNo">617</span><a name="line.617"></a>
<span class="sourceLineNo">618</span>        return key.isReadable();<a name="line.618"></a>
<span class="sourceLineNo">619</span>    }<a name="line.619"></a>
<span class="sourceLineNo">620</span><a name="line.620"></a>
<span class="sourceLineNo">621</span>    protected boolean isWritable(DatagramChannel handle) {<a name="line.621"></a>
<span class="sourceLineNo">622</span>        SelectionKey key = handle.keyFor(selector);<a name="line.622"></a>
<span class="sourceLineNo">623</span><a name="line.623"></a>
<span class="sourceLineNo">624</span>        if ((key == null) || (!key.isValid())) {<a name="line.624"></a>
<span class="sourceLineNo">625</span>            return false;<a name="line.625"></a>
<span class="sourceLineNo">626</span>        }<a name="line.626"></a>
<span class="sourceLineNo">627</span><a name="line.627"></a>
<span class="sourceLineNo">628</span>        return key.isWritable();<a name="line.628"></a>
<span class="sourceLineNo">629</span>    }<a name="line.629"></a>
<span class="sourceLineNo">630</span><a name="line.630"></a>
<span class="sourceLineNo">631</span>    protected SocketAddress localAddress(DatagramChannel handle) throws Exception {<a name="line.631"></a>
<span class="sourceLineNo">632</span>        InetSocketAddress inetSocketAddress = (InetSocketAddress) handle.socket().getLocalSocketAddress();<a name="line.632"></a>
<span class="sourceLineNo">633</span>        InetAddress inetAddress = inetSocketAddress.getAddress();<a name="line.633"></a>
<span class="sourceLineNo">634</span><a name="line.634"></a>
<span class="sourceLineNo">635</span>        if ((inetAddress instanceof Inet6Address) &amp;&amp; (((Inet6Address) inetAddress).isIPv4CompatibleAddress())) {<a name="line.635"></a>
<span class="sourceLineNo">636</span>            // Ugly hack to workaround a problem on linux : the ANY address is always converted to IPV6<a name="line.636"></a>
<span class="sourceLineNo">637</span>            // even if the original address was an IPV4 address. We do store the two IPV4 and IPV6<a name="line.637"></a>
<span class="sourceLineNo">638</span>            // ANY address in the map.<a name="line.638"></a>
<span class="sourceLineNo">639</span>            byte[] ipV6Address = ((Inet6Address) inetAddress).getAddress();<a name="line.639"></a>
<span class="sourceLineNo">640</span>            byte[] ipV4Address = new byte[4];<a name="line.640"></a>
<span class="sourceLineNo">641</span><a name="line.641"></a>
<span class="sourceLineNo">642</span>            System.arraycopy(ipV6Address, 12, ipV4Address, 0, 4);<a name="line.642"></a>
<span class="sourceLineNo">643</span><a name="line.643"></a>
<span class="sourceLineNo">644</span>            InetAddress inet4Adress = Inet4Address.getByAddress(ipV4Address);<a name="line.644"></a>
<span class="sourceLineNo">645</span>            return new InetSocketAddress(inet4Adress, inetSocketAddress.getPort());<a name="line.645"></a>
<span class="sourceLineNo">646</span>        } else {<a name="line.646"></a>
<span class="sourceLineNo">647</span>            return inetSocketAddress;<a name="line.647"></a>
<span class="sourceLineNo">648</span>        }<a name="line.648"></a>
<span class="sourceLineNo">649</span>    }<a name="line.649"></a>
<span class="sourceLineNo">650</span><a name="line.650"></a>
<span class="sourceLineNo">651</span>    protected NioSession newSession(IoProcessor&lt;NioSession&gt; processor, DatagramChannel handle,<a name="line.651"></a>
<span class="sourceLineNo">652</span>            SocketAddress remoteAddress) {<a name="line.652"></a>
<span class="sourceLineNo">653</span>        SelectionKey key = handle.keyFor(selector);<a name="line.653"></a>
<span class="sourceLineNo">654</span><a name="line.654"></a>
<span class="sourceLineNo">655</span>        if ((key == null) || (!key.isValid())) {<a name="line.655"></a>
<span class="sourceLineNo">656</span>            return null;<a name="line.656"></a>
<span class="sourceLineNo">657</span>        }<a name="line.657"></a>
<span class="sourceLineNo">658</span><a name="line.658"></a>
<span class="sourceLineNo">659</span>        NioDatagramSession newSession = new NioDatagramSession(this, handle, processor, remoteAddress);<a name="line.659"></a>
<span class="sourceLineNo">660</span>        newSession.setSelectionKey(key);<a name="line.660"></a>
<span class="sourceLineNo">661</span><a name="line.661"></a>
<span class="sourceLineNo">662</span>        return newSession;<a name="line.662"></a>
<span class="sourceLineNo">663</span>    }<a name="line.663"></a>
<span class="sourceLineNo">664</span><a name="line.664"></a>
<span class="sourceLineNo">665</span>    /**<a name="line.665"></a>
<span class="sourceLineNo">666</span>     * {@inheritDoc}<a name="line.666"></a>
<span class="sourceLineNo">667</span>     */<a name="line.667"></a>
<span class="sourceLineNo">668</span>    public final IoSession newSession(SocketAddress remoteAddress, SocketAddress localAddress) {<a name="line.668"></a>
<span class="sourceLineNo">669</span>        if (isDisposing()) {<a name="line.669"></a>
<span class="sourceLineNo">670</span>            throw new IllegalStateException("The Acceptor is being disposed.");<a name="line.670"></a>
<span class="sourceLineNo">671</span>        }<a name="line.671"></a>
<span class="sourceLineNo">672</span><a name="line.672"></a>
<span class="sourceLineNo">673</span>        if (remoteAddress == null) {<a name="line.673"></a>
<span class="sourceLineNo">674</span>            throw new IllegalArgumentException("remoteAddress");<a name="line.674"></a>
<span class="sourceLineNo">675</span>        }<a name="line.675"></a>
<span class="sourceLineNo">676</span><a name="line.676"></a>
<span class="sourceLineNo">677</span>        synchronized (bindLock) {<a name="line.677"></a>
<span class="sourceLineNo">678</span>            if (!isActive()) {<a name="line.678"></a>
<span class="sourceLineNo">679</span>                throw new IllegalStateException("Can't create a session from a unbound service.");<a name="line.679"></a>
<span class="sourceLineNo">680</span>            }<a name="line.680"></a>
<span class="sourceLineNo">681</span><a name="line.681"></a>
<span class="sourceLineNo">682</span>            try {<a name="line.682"></a>
<span class="sourceLineNo">683</span>                return newSessionWithoutLock(remoteAddress, localAddress);<a name="line.683"></a>
<span class="sourceLineNo">684</span>            } catch (RuntimeException e) {<a name="line.684"></a>
<span class="sourceLineNo">685</span>                throw e;<a name="line.685"></a>
<span class="sourceLineNo">686</span>            } catch (Error e) {<a name="line.686"></a>
<span class="sourceLineNo">687</span>                throw e;<a name="line.687"></a>
<span class="sourceLineNo">688</span>            } catch (Exception e) {<a name="line.688"></a>
<span class="sourceLineNo">689</span>                throw new RuntimeIoException("Failed to create a session.", e);<a name="line.689"></a>
<span class="sourceLineNo">690</span>            }<a name="line.690"></a>
<span class="sourceLineNo">691</span>        }<a name="line.691"></a>
<span class="sourceLineNo">692</span>    }<a name="line.692"></a>
<span class="sourceLineNo">693</span><a name="line.693"></a>
<span class="sourceLineNo">694</span>    protected DatagramChannel open(SocketAddress localAddress) throws Exception {<a name="line.694"></a>
<span class="sourceLineNo">695</span>        final DatagramChannel ch = DatagramChannel.open();<a name="line.695"></a>
<span class="sourceLineNo">696</span>        boolean success = false;<a name="line.696"></a>
<span class="sourceLineNo">697</span>        try {<a name="line.697"></a>
<span class="sourceLineNo">698</span>            new NioDatagramSessionConfig(ch).setAll(getSessionConfig());<a name="line.698"></a>
<span class="sourceLineNo">699</span>            ch.configureBlocking(false);<a name="line.699"></a>
<span class="sourceLineNo">700</span><a name="line.700"></a>
<span class="sourceLineNo">701</span>            try {<a name="line.701"></a>
<span class="sourceLineNo">702</span>                ch.socket().bind(localAddress);<a name="line.702"></a>
<span class="sourceLineNo">703</span>            } catch (IOException ioe) {<a name="line.703"></a>
<span class="sourceLineNo">704</span>                // Add some info regarding the address we try to bind to the<a name="line.704"></a>
<span class="sourceLineNo">705</span>                // message<a name="line.705"></a>
<span class="sourceLineNo">706</span>                String newMessage = "Error while binding on " + localAddress + "\n" + "original message : "<a name="line.706"></a>
<span class="sourceLineNo">707</span>                        + ioe.getMessage();<a name="line.707"></a>
<span class="sourceLineNo">708</span>                Exception e = new IOException(newMessage);<a name="line.708"></a>
<span class="sourceLineNo">709</span>                e.initCause(ioe.getCause());<a name="line.709"></a>
<span class="sourceLineNo">710</span><a name="line.710"></a>
<span class="sourceLineNo">711</span>                // And close the channel<a name="line.711"></a>
<span class="sourceLineNo">712</span>                ch.close();<a name="line.712"></a>
<span class="sourceLineNo">713</span><a name="line.713"></a>
<span class="sourceLineNo">714</span>                throw e;<a name="line.714"></a>
<span class="sourceLineNo">715</span>            }<a name="line.715"></a>
<span class="sourceLineNo">716</span><a name="line.716"></a>
<span class="sourceLineNo">717</span>            ch.register(selector, SelectionKey.OP_READ);<a name="line.717"></a>
<span class="sourceLineNo">718</span>            success = true;<a name="line.718"></a>
<span class="sourceLineNo">719</span>        } finally {<a name="line.719"></a>
<span class="sourceLineNo">720</span>            if (!success) {<a name="line.720"></a>
<span class="sourceLineNo">721</span>                close(ch);<a name="line.721"></a>
<span class="sourceLineNo">722</span>            }<a name="line.722"></a>
<span class="sourceLineNo">723</span>        }<a name="line.723"></a>
<span class="sourceLineNo">724</span><a name="line.724"></a>
<span class="sourceLineNo">725</span>        return ch;<a name="line.725"></a>
<span class="sourceLineNo">726</span>    }<a name="line.726"></a>
<span class="sourceLineNo">727</span><a name="line.727"></a>
<span class="sourceLineNo">728</span>    protected SocketAddress receive(DatagramChannel handle, IoBuffer buffer) throws Exception {<a name="line.728"></a>
<span class="sourceLineNo">729</span>        return handle.receive(buffer.buf());<a name="line.729"></a>
<span class="sourceLineNo">730</span>    }<a name="line.730"></a>
<span class="sourceLineNo">731</span><a name="line.731"></a>
<span class="sourceLineNo">732</span>    /**<a name="line.732"></a>
<span class="sourceLineNo">733</span>     * {@inheritDoc}<a name="line.733"></a>
<span class="sourceLineNo">734</span>     */<a name="line.734"></a>
<span class="sourceLineNo">735</span>    public void remove(NioSession session) {<a name="line.735"></a>
<span class="sourceLineNo">736</span>        getSessionRecycler().remove(session);<a name="line.736"></a>
<span class="sourceLineNo">737</span>        getListeners().fireSessionDestroyed(session);<a name="line.737"></a>
<span class="sourceLineNo">738</span>    }<a name="line.738"></a>
<span class="sourceLineNo">739</span><a name="line.739"></a>
<span class="sourceLineNo">740</span>    protected int select() throws Exception {<a name="line.740"></a>
<span class="sourceLineNo">741</span>        return selector.select();<a name="line.741"></a>
<span class="sourceLineNo">742</span>    }<a name="line.742"></a>
<span class="sourceLineNo">743</span><a name="line.743"></a>
<span class="sourceLineNo">744</span>    protected int select(long timeout) throws Exception {<a name="line.744"></a>
<span class="sourceLineNo">745</span>        return selector.select(timeout);<a name="line.745"></a>
<span class="sourceLineNo">746</span>    }<a name="line.746"></a>
<span class="sourceLineNo">747</span><a name="line.747"></a>
<span class="sourceLineNo">748</span>    protected Set&lt;SelectionKey&gt; selectedHandles() {<a name="line.748"></a>
<span class="sourceLineNo">749</span>        return selector.selectedKeys();<a name="line.749"></a>
<span class="sourceLineNo">750</span>    }<a name="line.750"></a>
<span class="sourceLineNo">751</span><a name="line.751"></a>
<span class="sourceLineNo">752</span>    protected int send(NioSession session, IoBuffer buffer, SocketAddress remoteAddress) throws Exception {<a name="line.752"></a>
<span class="sourceLineNo">753</span>        return ((DatagramChannel) session.getChannel()).send(buffer.buf(), remoteAddress);<a name="line.753"></a>
<span class="sourceLineNo">754</span>    }<a name="line.754"></a>
<span class="sourceLineNo">755</span><a name="line.755"></a>
<span class="sourceLineNo">756</span>    public void setDefaultLocalAddress(InetSocketAddress localAddress) {<a name="line.756"></a>
<span class="sourceLineNo">757</span>        setDefaultLocalAddress((SocketAddress) localAddress);<a name="line.757"></a>
<span class="sourceLineNo">758</span>    }<a name="line.758"></a>
<span class="sourceLineNo">759</span><a name="line.759"></a>
<span class="sourceLineNo">760</span>    protected void setInterestedInWrite(NioSession session, boolean isInterested) throws Exception {<a name="line.760"></a>
<span class="sourceLineNo">761</span>        SelectionKey key = session.getSelectionKey();<a name="line.761"></a>
<span class="sourceLineNo">762</span><a name="line.762"></a>
<span class="sourceLineNo">763</span>        if (key == null) {<a name="line.763"></a>
<span class="sourceLineNo">764</span>            return;<a name="line.764"></a>
<span class="sourceLineNo">765</span>        }<a name="line.765"></a>
<span class="sourceLineNo">766</span><a name="line.766"></a>
<span class="sourceLineNo">767</span>        int newInterestOps = key.interestOps();<a name="line.767"></a>
<span class="sourceLineNo">768</span><a name="line.768"></a>
<span class="sourceLineNo">769</span>        if (isInterested) {<a name="line.769"></a>
<span class="sourceLineNo">770</span>            newInterestOps |= SelectionKey.OP_WRITE;<a name="line.770"></a>
<span class="sourceLineNo">771</span>        } else {<a name="line.771"></a>
<span class="sourceLineNo">772</span>            newInterestOps &amp;= ~SelectionKey.OP_WRITE;<a name="line.772"></a>
<span class="sourceLineNo">773</span>        }<a name="line.773"></a>
<span class="sourceLineNo">774</span><a name="line.774"></a>
<span class="sourceLineNo">775</span>        key.interestOps(newInterestOps);<a name="line.775"></a>
<span class="sourceLineNo">776</span>    }<a name="line.776"></a>
<span class="sourceLineNo">777</span><a name="line.777"></a>
<span class="sourceLineNo">778</span>    public final void setSessionRecycler(IoSessionRecycler sessionRecycler) {<a name="line.778"></a>
<span class="sourceLineNo">779</span>        synchronized (bindLock) {<a name="line.779"></a>
<span class="sourceLineNo">780</span>            if (isActive()) {<a name="line.780"></a>
<span class="sourceLineNo">781</span>                throw new IllegalStateException("sessionRecycler can't be set while the acceptor is bound.");<a name="line.781"></a>
<span class="sourceLineNo">782</span>            }<a name="line.782"></a>
<span class="sourceLineNo">783</span><a name="line.783"></a>
<span class="sourceLineNo">784</span>            if (sessionRecycler == null) {<a name="line.784"></a>
<span class="sourceLineNo">785</span>                sessionRecycler = DEFAULT_RECYCLER;<a name="line.785"></a>
<span class="sourceLineNo">786</span>            }<a name="line.786"></a>
<span class="sourceLineNo">787</span><a name="line.787"></a>
<span class="sourceLineNo">788</span>            this.sessionRecycler = sessionRecycler;<a name="line.788"></a>
<span class="sourceLineNo">789</span>        }<a name="line.789"></a>
<span class="sourceLineNo">790</span>    }<a name="line.790"></a>
<span class="sourceLineNo">791</span><a name="line.791"></a>
<span class="sourceLineNo">792</span>    /**<a name="line.792"></a>
<span class="sourceLineNo">793</span>     * {@inheritDoc}<a name="line.793"></a>
<span class="sourceLineNo">794</span>     */<a name="line.794"></a>
<span class="sourceLineNo">795</span>    @Override<a name="line.795"></a>
<span class="sourceLineNo">796</span>    protected final void unbind0(List&lt;? extends SocketAddress&gt; localAddresses) throws Exception {<a name="line.796"></a>
<span class="sourceLineNo">797</span>        AcceptorOperationFuture request = new AcceptorOperationFuture(localAddresses);<a name="line.797"></a>
<span class="sourceLineNo">798</span><a name="line.798"></a>
<span class="sourceLineNo">799</span>        cancelQueue.add(request);<a name="line.799"></a>
<span class="sourceLineNo">800</span>        startupAcceptor();<a name="line.800"></a>
<span class="sourceLineNo">801</span>        wakeup();<a name="line.801"></a>
<span class="sourceLineNo">802</span><a name="line.802"></a>
<span class="sourceLineNo">803</span>        request.awaitUninterruptibly();<a name="line.803"></a>
<span class="sourceLineNo">804</span><a name="line.804"></a>
<span class="sourceLineNo">805</span>        if (request.getException() != null) {<a name="line.805"></a>
<span class="sourceLineNo">806</span>            throw request.getException();<a name="line.806"></a>
<span class="sourceLineNo">807</span>        }<a name="line.807"></a>
<span class="sourceLineNo">808</span>    }<a name="line.808"></a>
<span class="sourceLineNo">809</span><a name="line.809"></a>
<span class="sourceLineNo">810</span>    /**<a name="line.810"></a>
<span class="sourceLineNo">811</span>     * {@inheritDoc}<a name="line.811"></a>
<span class="sourceLineNo">812</span>     */<a name="line.812"></a>
<span class="sourceLineNo">813</span>    public void updateTrafficControl(NioSession session) {<a name="line.813"></a>
<span class="sourceLineNo">814</span>        throw new UnsupportedOperationException();<a name="line.814"></a>
<span class="sourceLineNo">815</span>    }<a name="line.815"></a>
<span class="sourceLineNo">816</span><a name="line.816"></a>
<span class="sourceLineNo">817</span>    protected void wakeup() {<a name="line.817"></a>
<span class="sourceLineNo">818</span>        selector.wakeup();<a name="line.818"></a>
<span class="sourceLineNo">819</span>    }<a name="line.819"></a>
<span class="sourceLineNo">820</span><a name="line.820"></a>
<span class="sourceLineNo">821</span>    /**<a name="line.821"></a>
<span class="sourceLineNo">822</span>     * {@inheritDoc}<a name="line.822"></a>
<span class="sourceLineNo">823</span>     */<a name="line.823"></a>
<span class="sourceLineNo">824</span>    public void write(NioSession session, WriteRequest writeRequest) {<a name="line.824"></a>
<span class="sourceLineNo">825</span>        // We will try to write the message directly<a name="line.825"></a>
<span class="sourceLineNo">826</span>        long currentTime = System.currentTimeMillis();<a name="line.826"></a>
<span class="sourceLineNo">827</span>        final WriteRequestQueue writeRequestQueue = session.getWriteRequestQueue();<a name="line.827"></a>
<span class="sourceLineNo">828</span>        final int maxWrittenBytes = session.getConfig().getMaxReadBufferSize()<a name="line.828"></a>
<span class="sourceLineNo">829</span>                + (session.getConfig().getMaxReadBufferSize() &gt;&gt;&gt; 1);<a name="line.829"></a>
<span class="sourceLineNo">830</span><a name="line.830"></a>
<span class="sourceLineNo">831</span>        int writtenBytes = 0;<a name="line.831"></a>
<span class="sourceLineNo">832</span><a name="line.832"></a>
<span class="sourceLineNo">833</span>        // Deal with the special case of a Message marker (no bytes in the request)<a name="line.833"></a>
<span class="sourceLineNo">834</span>        // We just have to return after having calle dthe messageSent event<a name="line.834"></a>
<span class="sourceLineNo">835</span>        IoBuffer buf = (IoBuffer) writeRequest.getMessage();<a name="line.835"></a>
<span class="sourceLineNo">836</span><a name="line.836"></a>
<span class="sourceLineNo">837</span>        if (buf.remaining() == 0) {<a name="line.837"></a>
<span class="sourceLineNo">838</span>            // Clear and fire event<a name="line.838"></a>
<span class="sourceLineNo">839</span>            session.setCurrentWriteRequest(null);<a name="line.839"></a>
<span class="sourceLineNo">840</span>            buf.reset();<a name="line.840"></a>
<span class="sourceLineNo">841</span>            session.getFilterChain().fireMessageSent(writeRequest);<a name="line.841"></a>
<span class="sourceLineNo">842</span>            return;<a name="line.842"></a>
<span class="sourceLineNo">843</span>        }<a name="line.843"></a>
<span class="sourceLineNo">844</span><a name="line.844"></a>
<span class="sourceLineNo">845</span>        // Now, write the data<a name="line.845"></a>
<span class="sourceLineNo">846</span>        try {<a name="line.846"></a>
<span class="sourceLineNo">847</span>            for (;;) {<a name="line.847"></a>
<span class="sourceLineNo">848</span>                if (writeRequest == null) {<a name="line.848"></a>
<span class="sourceLineNo">849</span>                    writeRequest = writeRequestQueue.poll(session);<a name="line.849"></a>
<span class="sourceLineNo">850</span><a name="line.850"></a>
<span class="sourceLineNo">851</span>                    if (writeRequest == null) {<a name="line.851"></a>
<span class="sourceLineNo">852</span>                        setInterestedInWrite(session, false);<a name="line.852"></a>
<span class="sourceLineNo">853</span>                        break;<a name="line.853"></a>
<span class="sourceLineNo">854</span>                    }<a name="line.854"></a>
<span class="sourceLineNo">855</span><a name="line.855"></a>
<span class="sourceLineNo">856</span>                    session.setCurrentWriteRequest(writeRequest);<a name="line.856"></a>
<span class="sourceLineNo">857</span>                }<a name="line.857"></a>
<span class="sourceLineNo">858</span><a name="line.858"></a>
<span class="sourceLineNo">859</span>                buf = (IoBuffer) writeRequest.getMessage();<a name="line.859"></a>
<span class="sourceLineNo">860</span><a name="line.860"></a>
<span class="sourceLineNo">861</span>                if (buf.remaining() == 0) {<a name="line.861"></a>
<span class="sourceLineNo">862</span>                    // Clear and fire event<a name="line.862"></a>
<span class="sourceLineNo">863</span>                    session.setCurrentWriteRequest(null);<a name="line.863"></a>
<span class="sourceLineNo">864</span>                    buf.reset();<a name="line.864"></a>
<span class="sourceLineNo">865</span>                    session.getFilterChain().fireMessageSent(writeRequest);<a name="line.865"></a>
<span class="sourceLineNo">866</span>                    continue;<a name="line.866"></a>
<span class="sourceLineNo">867</span>                }<a name="line.867"></a>
<span class="sourceLineNo">868</span><a name="line.868"></a>
<span class="sourceLineNo">869</span>                SocketAddress destination = writeRequest.getDestination();<a name="line.869"></a>
<span class="sourceLineNo">870</span><a name="line.870"></a>
<span class="sourceLineNo">871</span>                if (destination == null) {<a name="line.871"></a>
<span class="sourceLineNo">872</span>                    destination = session.getRemoteAddress();<a name="line.872"></a>
<span class="sourceLineNo">873</span>                }<a name="line.873"></a>
<span class="sourceLineNo">874</span><a name="line.874"></a>
<span class="sourceLineNo">875</span>                int localWrittenBytes = send(session, buf, destination);<a name="line.875"></a>
<span class="sourceLineNo">876</span><a name="line.876"></a>
<span class="sourceLineNo">877</span>                if ((localWrittenBytes == 0) || (writtenBytes &gt;= maxWrittenBytes)) {<a name="line.877"></a>
<span class="sourceLineNo">878</span>                    // Kernel buffer is full or wrote too much<a name="line.878"></a>
<span class="sourceLineNo">879</span>                    setInterestedInWrite(session, true);<a name="line.879"></a>
<span class="sourceLineNo">880</span><a name="line.880"></a>
<span class="sourceLineNo">881</span>                    session.getWriteRequestQueue().offer(session, writeRequest);<a name="line.881"></a>
<span class="sourceLineNo">882</span>                    scheduleFlush(session);<a name="line.882"></a>
<span class="sourceLineNo">883</span>                } else {<a name="line.883"></a>
<span class="sourceLineNo">884</span>                    setInterestedInWrite(session, false);<a name="line.884"></a>
<span class="sourceLineNo">885</span><a name="line.885"></a>
<span class="sourceLineNo">886</span>                    // Clear and fire event<a name="line.886"></a>
<span class="sourceLineNo">887</span>                    session.setCurrentWriteRequest(null);<a name="line.887"></a>
<span class="sourceLineNo">888</span>                    writtenBytes += localWrittenBytes;<a name="line.888"></a>
<span class="sourceLineNo">889</span>                    buf.reset();<a name="line.889"></a>
<span class="sourceLineNo">890</span>                    session.getFilterChain().fireMessageSent(writeRequest);<a name="line.890"></a>
<span class="sourceLineNo">891</span><a name="line.891"></a>
<span class="sourceLineNo">892</span>                    break;<a name="line.892"></a>
<span class="sourceLineNo">893</span>                }<a name="line.893"></a>
<span class="sourceLineNo">894</span>            }<a name="line.894"></a>
<span class="sourceLineNo">895</span>        } catch (Exception e) {<a name="line.895"></a>
<span class="sourceLineNo">896</span>            session.getFilterChain().fireExceptionCaught(e);<a name="line.896"></a>
<span class="sourceLineNo">897</span>        } finally {<a name="line.897"></a>
<span class="sourceLineNo">898</span>            session.increaseWrittenBytes(writtenBytes, currentTime);<a name="line.898"></a>
<span class="sourceLineNo">899</span>        }<a name="line.899"></a>
<span class="sourceLineNo">900</span>    }<a name="line.900"></a>
<span class="sourceLineNo">901</span>}<a name="line.901"></a>




























































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