import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
+import java.net.SocketTimeoutException;
import javax.management.ListenerNotFoundException;
import javax.management.MBeanNotificationInfo;
import javax.management.NotificationListener;
import javax.management.ObjectName;
+import org.apache.commons.modeler.Registry;
import org.apache.jk.core.JkHandler;
import org.apache.jk.core.Msg;
import org.apache.jk.core.MsgContext;
import org.apache.coyote.Request;
import org.apache.coyote.RequestGroupInfo;
import org.apache.coyote.RequestInfo;
-import org.apache.tomcat.util.modeler.Registry;
import org.apache.tomcat.util.threads.ThreadPool;
import org.apache.tomcat.util.threads.ThreadPoolRunnable;
*/
public class ChannelNioSocket extends JkHandler
implements NotificationBroadcaster, JkChannel {
- private static org.apache.juli.logging.Log log =
- org.apache.juli.logging.LogFactory.getLog( ChannelNioSocket.class );
+ private static org.apache.commons.logging.Log log =
+ org.apache.commons.logging.LogFactory.getLog( ChannelNioSocket.class );
private int startPort=8009;
private int maxPort=8019; // 0 for backward compat.
return packetSize;
}
-
/**
* jmx:managed-attribute description="Bind on a specified address" access="READ_WRITE"
*/
synchronized void process(SelectionKey sk) {
if(!sk.isValid()) {
+ SocketInputStream sis = (SocketInputStream)ep.getNote(isNote);
+ sis.closeIt();
return;
}
if(sk.isReadable()) {
Iterator it = sels.iterator();
while(it.hasNext()) {
SelectionKey sk = (SelectionKey)it.next();
- if(sk.isValid()) {
- if(sk.isAcceptable()) {
- acceptConnections();
- } else {
- SocketConnection sc = (SocketConnection)sk.attachment();
- sc.process(sk);
- }
+ if(sk.isAcceptable()) {
+ acceptConnections();
} else {
- sk.cancel();
+ SocketConnection sc = (SocketConnection)sk.attachment();
+ sc.process(sk);
}
it.remove();
}
nr = -1; // Can't handle this yet
}
if(nr < 0) {
- isClosed = true;
- notify();
+ closeIt();
return false;
} else if(nr == 0) {
if(!nioIsBroken) {
return true;
}
+ synchronized void closeIt() {
+ isClosed = true;
+ if(blocking)
+ notify();
+ }
+
public int read(byte [] data) throws IOException {
return read(data, 0, data.length);
}
if(fill(len) < 0) {
isClosed = true;
}
- }
+ } else if(!isClosed) {
+ throw new SocketTimeoutException("Read request timed out");
+ }
}
}