/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License.
*/ package org.apache.tomcat.util.net;
/** * Base class for a SocketChannel wrapper used by the endpoint. * This way, logic for an SSL socket channel remains the same as for * a non SSL, making sure we don't need to code for any exception cases.
*/ publicclass Nio2Channel implements AsynchronousByteChannel {
public Nio2Channel(SocketBufferHandler bufHandler) { this.bufHandler = bufHandler;
}
/** * Reset the channel. * * @param channel The new async channel to associate with this NIO2 channel * @param socketWrapper The new socket to associate with this NIO2 channel * * @throws IOException If a problem was encountered resetting the channel
*/ publicvoid reset(AsynchronousSocketChannel channel, SocketWrapperBase<Nio2Channel> socketWrapper) throws IOException { this.sc = channel; this.socketWrapper = socketWrapper;
bufHandler.reset();
}
/** * Closes this channel. * * @throws IOException If an I/O error occurs
*/
@Override publicvoid close() throws IOException {
sc.close();
}
/** * Close the connection. * * @param force Should the underlying socket be forcibly closed? * * @throws IOException If closing the secure channel fails.
*/ publicvoid close(boolean force) throws IOException { if (isOpen() || force) {
close();
}
}
/** * Tells whether or not this channel is open. * * @return <code>true</code> if, and only if, this channel is open
*/
@Override publicboolean isOpen() { return sc.isOpen();
}
public SocketBufferHandler getBufHandler() { return bufHandler;
}
public AsynchronousSocketChannel getIOChannel() { return sc;
}
@Override public Future<Integer> read(ByteBuffer dst) { return sc.read(dst);
}
@Override public <A> void read(ByteBuffer dst, A attachment,
CompletionHandler<Integer, ? super A> handler) {
read(dst, 0L, TimeUnit.MILLISECONDS, attachment, handler);
}
public <A> void read(ByteBuffer dst, long timeout, TimeUnit unit, A attachment,
CompletionHandler<Integer, ? super A> handler) {
sc.read(dst, timeout, unit, attachment, handler);
}
public <A> void read(ByteBuffer[] dsts, int offset, int length, long timeout, TimeUnit unit,
A attachment, CompletionHandler<Long,? super A> handler) {
sc.read(dsts, offset, length, timeout, unit, attachment, handler);
}
@Override public Future<Integer> write(ByteBuffer src) { return sc.write(src);
}
@Override public <A> void write(ByteBuffer src, A attachment,
CompletionHandler<Integer, ? super A> handler) {
write(src, 0L, TimeUnit.MILLISECONDS, attachment, handler);
}
public <A> void write(ByteBuffer src, long timeout, TimeUnit unit, A attachment,
CompletionHandler<Integer, ? super A> handler) {
sc.write(src, timeout, unit, attachment, handler);
}
public <A> void write(ByteBuffer[] srcs, int offset, int length, long timeout, TimeUnit unit, A attachment,
CompletionHandler<Long,? super A> handler) {
sc.write(srcs, offset, length, timeout, unit, attachment, handler);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.