listenerthread.java

来自「java jdk 1.4的源码」· Java 代码 · 共 109 行

JAVA
109
字号
/* * @(#)ListenerThread.java	1.40 03/01/23 * * Copyright 2003 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package com.sun.corba.se.internal.iiop;import java.net.InetAddress;import java.net.Socket;import java.net.SocketException;import java.net.ServerSocket;import java.io.IOException;public class ListenerThread extends Thread {    protected static final int MAX_CLEANUP_RETRIES=5;    protected ServerSocket serverSocket;    protected ConnectionTable connectionTable;    protected String socketType;    private boolean keepRunning = true;    ListenerThread(ConnectionTable connectionTable,		   ThreadGroup g,		   ServerSocket serverSocket,		   String socketType)     {	super(g, "JavaIDL Listener");	this.serverSocket = serverSocket;	this.connectionTable = connectionTable;	this.socketType = socketType;    }    public ListenerThread(ConnectionTable connectionTable, 			  ServerSocket serverSocket,			  String socketType)    {	super("JavaIDL Listener");	this.serverSocket = serverSocket;	this.connectionTable = connectionTable;	this.socketType = socketType;    }    public ServerSocket getSocket()    {	return serverSocket;    }    public void run()     {        int tries = 0;	// Loop forever listening for incoming connections.        while (keepRunning) {	    try {		// Accept an incoming connection request	        Socket socket = serverSocket.accept();		// set socket to disable Nagle's algorithm (always send immediately)		try {		    socket.setTcpNoDelay(true);		} catch (Exception e) {		}		// Create a Connection instance and process incoming request		Connection conn = connectionTable.getConnection(socket, 								socketType);                tries = 0;		// Check if #connections > HighWaterMark, if so cleanup.		// This prevents incoming connections from being rejected		// because of TCP/IP or OS network connection limits.                connectionTable.checkConnectionTable();            }            catch (SocketException ex) {		// An exception was thrown by the accept() call.		// This probably means that we have run out of network 		// connections.                 if (tries == MAX_CLEANUP_RETRIES) {		    // We tried closing existing connections but that didnt help		    // So it must be some unknown networking problem.                    continue;		}		// Clean up some existing connections.                if (!connectionTable.cleanUp()) {		    // Could not close any connections :-(                    continue;		}                tries++;            }            catch (Exception ex) { }	}    }    synchronized void shutdown() {        keepRunning = false;        try {            serverSocket.close();        } catch (IOException ioex) {}    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?