1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.nio.channels; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.Socket; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.SocketAddress; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.nio.ByteBuffer; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.nio.channels.spi.AbstractSelectableChannel; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.nio.channels.spi.SelectorProvider; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * A {@code SocketChannel} is a selectable channel that provides a partial 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * abstraction of stream connecting socket. {@code socket()} returns the related 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link Socket} instance which can handle the socket. 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * A socket channel is open but not connected when created by {@code open()}. 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * After connecting it by calling {@code connect(SocketAddress)}, it will remain 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * connected until it gets closed. If the connection is non-blocking then 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code connect(SocketAddress)} is used to initiate the connection, followed 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * by a call of {@code finishConnect()} to perform the final steps of 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * connecting. {@code isConnectionPending()} indicates if the connection is 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * blocked or not; {@code isConnected()} indicates if the socket is finally 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * connected or not. 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The input and output sides of a channel can be shut down independently and 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * asynchronously without closing the channel. The {@code shutdownInput} method 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is used for the input side of a channel and subsequent read operations return 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * -1, which means end of stream. If another thread is blocked in a read 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * operation when the shutdown occurs, the read will end without effect and 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * return end of stream. The {@code shutdownOutput} method is used for the 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * output side of the channel; subsequent write operations throw a 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link ClosedChannelException}. If the output is shut down and another thread 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is blocked in a write operation, an {@link AsynchronousCloseException} will 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * be thrown to the pending thread. 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Socket channels are thread-safe, no more than one thread can read or write at 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * any given time. The {@code connect(SocketAddress)} and {@code 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * finishConnect()} methods are synchronized against each other; when they are 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * processing, calls to {@code read} and {@code write} will block. 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic abstract class SocketChannel extends AbstractSelectableChannel implements 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteChannel, ScatteringByteChannel, GatheringByteChannel { 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code SocketChannel}. 62f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param selectorProvider 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * an instance of SelectorProvider. 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected SocketChannel(SelectorProvider selectorProvider) { 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(selectorProvider); 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates an open and unconnected socket channel. 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This channel is created by calling {@code openSocketChannel()} of the 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * default {@link SelectorProvider} instance. 75eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the new channel which is open but unconnected. 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an I/O error occurs. 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static SocketChannel open() throws IOException { 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return SelectorProvider.provider().openSocketChannel(); 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a socket channel and connects it to a socket address. 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This method performs a call to {@code open()} followed by a call to 880ac77ac8e915bff1a863e371f9b363033f9cf759Elliott Hughes * {@code connect(SocketAddress)}. 89eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param address 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the socket address to be connected to. 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the new connected channel. 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws AsynchronousCloseException 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this channel is closed by another thread while this method 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is executing. 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ClosedByInterruptException 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if another thread interrupts the calling thread while this 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * operation is executing. The calling thread will have the 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * interrupt state set and the channel will be closed. 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws UnresolvedAddressException 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the address is not resolved. 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws UnsupportedAddressTypeException 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the address type is not supported. 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an I/O error occurs. 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static SocketChannel open(SocketAddress address) throws IOException { 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SocketChannel socketChannel = open(); 109b46dab348e2007bc08abaf7ecae34d89a2474e50Elliott Hughes if (socketChannel != null) { 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project socketChannel.connect(address); 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return socketChannel; 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the valid operations of this channel. Socket channels support 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * connect, read and write operation, so this method returns 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code SelectionKey.OP_CONNECT | SelectionKey.OP_READ | SelectionKey.OP_WRITE}. 119f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the operations supported by this channel. 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see java.nio.channels.SelectableChannel#validOps() 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 123eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final int validOps() { 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return (SelectionKey.OP_CONNECT | SelectionKey.OP_READ | SelectionKey.OP_WRITE); 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the socket assigned to this channel, which does not declare any public 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * methods that are not declared in {@code Socket}. 131f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the socket assigned to this channel. 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract Socket socket(); 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Indicates whether this channel's socket is connected. 138f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if this channel's socket is connected, {@code false} 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * otherwise. 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract boolean isConnected(); 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Indicates whether this channel's socket is still trying to connect. 146f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if the connection is initiated but not finished; 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code false} otherwise. 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract boolean isConnectionPending(); 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Connects this channel's socket with a remote address. 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this channel is blocking, this method will suspend until connecting is 1560ac77ac8e915bff1a863e371f9b363033f9cf759Elliott Hughes * finished or an I/O exception occurs. If the channel is non-blocking, 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this method will return {@code true} if the connection is finished at 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * once or return {@code false} when the connection must be finished later 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * by calling {@code finishConnect()}. 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This method can be called at any moment and can block other read and 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * write operations while connecting. It executes the same security checks 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * as the connect method of the {@code Socket} class. 164eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param address 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the address to connect with. 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if the connection is finished, {@code false} 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * otherwise. 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws AlreadyConnectedException 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the channel is already connected. 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ConnectionPendingException 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a non-blocking connecting operation is already executing on 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this channel. 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ClosedChannelException 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this channel is closed. 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws AsynchronousCloseException 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this channel is closed by another thread while this method 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is executing. 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ClosedByInterruptException 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if another thread interrupts the calling thread while this 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * operation is in progress. The calling thread will have the 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * interrupt state set and this channel will be closed. 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws UnresolvedAddressException 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the address is not resolved. 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws UnsupportedAddressTypeException 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the address type is not supported. 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an I/O error occurs. 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract boolean connect(SocketAddress address) throws IOException; 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Completes the connection process initiated by a call of {@code 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * connect(SocketAddress)}. 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This method returns {@code true} if the connection is finished already 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and returns {@code false} if the channel is non-blocking and the 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * connection is not finished yet. 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this channel is in blocking mode, this method will suspend and return 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code true} when the connection is finished. It closes this channel and 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * throws an exception if the connection fails. 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This method can be called at any moment and it can block other {@code 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * read} and {@code write} operations while connecting. 206eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if the connection is successfully finished, {@code 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * false} otherwise. 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NoConnectionPendingException 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the channel is not connected and the connection process 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * has not been initiated. 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ClosedChannelException 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this channel is closed. 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws AsynchronousCloseException 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this channel is closed by another thread while this method 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is executing. 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ClosedByInterruptException 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if another thread interrupts the calling thread while this 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * operation is in progress. The calling thread has the 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * interrupt state set, and this channel is closed. 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an I/O error occurs. 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract boolean finishConnect() throws IOException; 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Reads bytes from this socket channel into the given buffer. 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The maximum number of bytes that will be read is the remaining number of 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * bytes in the buffer when the method is invoked. The bytes will be copied 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * into the buffer starting at the buffer's current position. 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The call may block if other threads are also attempting to read from this 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * channel. 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Upon completion, the buffer's position is set to the end of the bytes 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * that have been read. The buffer's limit is not changed. 238eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param target 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the byte buffer to receive the bytes. 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the number of bytes actually read. 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws AsynchronousCloseException 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if another thread closes the channel during the read. 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NotYetConnectedException 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this channel is not yet connected. 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ClosedByInterruptException 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if another thread interrupts the calling thread while this 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * operation is in progress. The interrupt state of the calling 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thread is set and the channel is closed. 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ClosedChannelException 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this channel is closed. 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if another I/O error occurs. 254eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * @see java.nio.channels.ReadableByteChannel#read(java.nio.ByteBuffer) 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract int read(ByteBuffer target) throws IOException; 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 259eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * Reads bytes from this socket channel into a subset of the given buffers. 260eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * This method attempts to read all {@code remaining()} bytes from {@code 261eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * length} byte buffers, in order, starting at {@code targets[offset]}. The 262eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * number of bytes actually read is returned. 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If a read operation is in progress, subsequent threads will block until 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the read is completed and will then contend for the ability to read. 266eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param targets 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the array of byte buffers into which the bytes will be copied. 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param offset 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the index of the first buffer to store bytes in. 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param length 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the maximum number of buffers to store bytes in. 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the number of bytes actually read. 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws AsynchronousCloseException 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this channel is closed by another thread during this read 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * operation. 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ClosedByInterruptException 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if another thread interrupts the calling thread while this 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * operation is in progress. The interrupt state of the calling 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thread is set and the channel is closed. 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ClosedChannelException 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this channel is closed. 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IndexOutOfBoundsException 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code offset < 0} or {@code length < 0}, or if {@code 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * offset + length} is greater than the size of {@code targets}. 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if another I/O error occurs. 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NotYetConnectedException 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this channel is not yet connected. 290eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * @see java.nio.channels.ScatteringByteChannel#read(java.nio.ByteBuffer[], 291eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * int, int) 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2930ac77ac8e915bff1a863e371f9b363033f9cf759Elliott Hughes public abstract long read(ByteBuffer[] targets, int offset, int length) throws IOException; 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Reads bytes from this socket channel and stores them in the specified 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * array of buffers. This method attempts to read as many bytes as can be 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * stored in the buffer array from this channel and returns the number of 299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * bytes actually read. 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If a read operation is in progress, subsequent threads will block until 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the read is completed and will then contend for the ability to read. 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Calling this method is equivalent to calling {@code read(targets, 0, 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * targets.length);} 306eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param targets 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the array of byte buffers into which the bytes will be copied. 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the number of bytes actually read. 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws AsynchronousCloseException 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this channel is closed by another thread during this read 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * operation. 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ClosedByInterruptException 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if another thread interrupts the calling thread while this 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * operation is in progress. The interrupt state of the calling 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thread is set and the channel is closed. 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ClosedChannelException 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this channel is closed. 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if another I/O error occurs. 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NotYetConnectedException 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this channel is not yet connected. 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 3240ac77ac8e915bff1a863e371f9b363033f9cf759Elliott Hughes public synchronized final long read(ByteBuffer[] targets) throws IOException { 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return read(targets, 0, targets.length); 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Writes bytes from the given byte buffer to this socket channel. The 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * maximum number of bytes that are written is the remaining number of bytes 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * in the buffer when this method is invoked. The bytes are taken from the 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * buffer starting at the buffer's position. 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The call may block if other threads are also attempting to write to the 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * same channel. 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Upon completion, the buffer's position is updated to the end of the bytes 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * that have been written. The buffer's limit is not changed. 339eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * 340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param source 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the byte buffer containing the bytes to be written. 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the number of bytes actually written. 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws AsynchronousCloseException 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if another thread closes the channel during the write. 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ClosedByInterruptException 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if another thread interrupts the calling thread while this 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * operation is in progress. The interrupt state of the calling 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thread is set and the channel is closed. 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ClosedChannelException 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the channel was already closed. 351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if another I/O error occurs. 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NotYetConnectedException 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this channel is not connected yet. 355eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * @see java.nio.channels.WritableByteChannel#write(java.nio.ByteBuffer) 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract int write(ByteBuffer source) throws IOException; 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 360eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * Attempts to write a subset of the given bytes from the buffers to this 361eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * socket channel. This method attempts to write all {@code remaining()} 362eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * bytes from {@code length} byte buffers, in order, starting at {@code 363eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * sources[offset]}. The number of bytes actually written is returned. 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If a write operation is in progress, subsequent threads will block until 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the write is completed and then contend for the ability to write. 367eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sources 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the array of byte buffers that is the source for bytes written 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to this channel. 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param offset 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the index of the first buffer in {@code buffers }to get bytes 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * from. 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param length 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the number of buffers to get bytes from. 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the number of bytes actually written to this channel. 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws AsynchronousCloseException 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this channel is closed by another thread during this write 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * operation. 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ClosedByInterruptException 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if another thread interrupts the calling thread while this 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * operation is in progress. The interrupt state of the calling 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thread is set and the channel is closed. 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ClosedChannelException 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this channel is closed. 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IndexOutOfBoundsException 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code offset < 0} or {@code length < 0}, or if {@code 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * offset + length} is greater than the size of {@code sources}. 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if another I/O error occurs. 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NotYetConnectedException 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this channel is not yet connected. 393eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * @see java.nio.channels.GatheringByteChannel#write(java.nio.ByteBuffer[], 394eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * int, int) 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 3960ac77ac8e915bff1a863e371f9b363033f9cf759Elliott Hughes public abstract long write(ByteBuffer[] sources, int offset, int length) throws IOException; 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Writes bytes from all the given byte buffers to this socket channel. 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Calling this method is equivalent to calling {@code write(sources, 0, 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * sources.length);} 403eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * 404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sources 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the buffers containing bytes to write. 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the number of bytes actually written. 407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws AsynchronousCloseException 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this channel is closed by another thread during this write 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * operation. 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ClosedByInterruptException 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if another thread interrupts the calling thread while this 412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * operation is in progress. The interrupt state of the calling 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * thread is set and the channel is closed. 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ClosedChannelException 415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this channel is closed. 416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if another I/O error occurs. 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NotYetConnectedException 419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this channel is not yet connected. 420eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson * @see java.nio.channels.GatheringByteChannel#write(java.nio.ByteBuffer[]) 421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 4220ac77ac8e915bff1a863e371f9b363033f9cf759Elliott Hughes public synchronized final long write(ByteBuffer[] sources) throws IOException { 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return write(sources, 0, sources.length); 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 426