org.apache.tomcat.util.net.TcpConnection Maven / Gradle / Ivy
/*
* 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;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
/**
*
*/
public class TcpConnection { // implements Endpoint {
/**
* Maxium number of times to clear the socket input buffer.
*/
static int MAX_SHUTDOWN_TRIES=20;
public TcpConnection() {
}
// -------------------- Properties --------------------
PoolTcpEndpoint endpoint;
Socket socket;
public static void setMaxShutdownTries(int mst) {
MAX_SHUTDOWN_TRIES = mst;
}
public void setEndpoint(PoolTcpEndpoint endpoint) {
this.endpoint = endpoint;
}
public PoolTcpEndpoint getEndpoint() {
return endpoint;
}
public void setSocket(Socket socket) {
this.socket=socket;
}
public Socket getSocket() {
return socket;
}
public void recycle() {
endpoint = null;
socket = null;
}
// Another frequent repetition
public static int readLine(InputStream in, byte[] b, int off, int len)
throws IOException
{
if (len <= 0) {
return 0;
}
int count = 0, c;
while ((c = in.read()) != -1) {
b[off++] = (byte)c;
count++;
if (c == '\n' || count == len) {
break;
}
}
return count > 0 ? count : -1;
}
// Usefull stuff - avoid having it replicated everywhere
public static void shutdownInput(Socket socket)
throws IOException
{
try {
InputStream is = socket.getInputStream();
int available = is.available ();
int count=0;
// XXX on JDK 1.3 just socket.shutdownInput () which
// was added just to deal with such issues.
// skip any unread (bogus) bytes
while (available > 0 && count++ < MAX_SHUTDOWN_TRIES) {
is.skip (available);
available = is.available();
}
}catch(NullPointerException npe) {
// do nothing - we are just cleaning up, this is
// a workaround for Netscape \n\r in POST - it is supposed
// to be ignored
}
}
}