in core/src/main/java/org/apache/mina/transport/nio/NioTcpServer.java [273:353]
private synchronized void createSession(SocketChannel clientSocket) throws IOException {
LOG.debug("create session");
SocketChannel socketChannel = clientSocket;
TcpSessionConfig config = getSessionConfig();
SelectorLoop readWriteSelectorLoop = readWriteSelectorPool.getSelectorLoop();
final NioTcpSession session = new NioTcpSession(this, socketChannel, readWriteSelectorLoop, idleChecker);
socketChannel.configureBlocking(false);
// apply idle configuration
session.getConfig().setIdleTimeInMillis(IdleStatus.READ_IDLE, config.getIdleTimeInMillis(IdleStatus.READ_IDLE));
session.getConfig().setIdleTimeInMillis(IdleStatus.WRITE_IDLE,
config.getIdleTimeInMillis(IdleStatus.WRITE_IDLE));
// apply the default service socket configuration
Boolean keepAlive = config.isKeepAlive();
if (keepAlive != null) {
session.getConfig().setKeepAlive(keepAlive);
}
Boolean oobInline = config.isOobInline();
if (oobInline != null) {
session.getConfig().setOobInline(oobInline);
}
Boolean reuseAddress = config.isReuseAddress();
if (reuseAddress != null) {
session.getConfig().setReuseAddress(reuseAddress);
}
Boolean tcpNoDelay = config.isTcpNoDelay();
if (tcpNoDelay != null) {
session.getConfig().setTcpNoDelay(tcpNoDelay);
}
Integer receiveBufferSize = config.getReadBufferSize();
if (receiveBufferSize != null) {
session.getConfig().setReadBufferSize(receiveBufferSize);
}
Integer sendBufferSize = config.getSendBufferSize();
if (sendBufferSize != null) {
session.getConfig().setSendBufferSize(sendBufferSize);
}
Integer trafficClass = config.getTrafficClass();
if (trafficClass != null) {
session.getConfig().setTrafficClass(trafficClass);
}
Integer soLinger = config.getSoLinger();
if (soLinger != null) {
session.getConfig().setSoLinger(soLinger);
}
// Set the secured flag if the service is to be used over SSL/TLS
if (config.isSecured()) {
session.initSecure(config.getSslContext());
}
// add the session to the queue for being added to the selector
readWriteSelectorLoop.register(false, false, true, false, session, socketChannel, new RegistrationCallback() {
@Override
public void done(SelectionKey selectionKey) {
session.setSelectionKey(selectionKey);
session.setConnected();
}
});
idleChecker.sessionRead(session, System.currentTimeMillis());
idleChecker.sessionWritten(session, System.currentTimeMillis());
}