import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
+import java.net.SocketException;
/**
* Wrapper around ServerSocket for Thrift.
*/
public class TServerSocket extends TServerTransport {
+ /**
+ * Underlying serversocket object
+ */
private ServerSocket serverSocket_ = null;
+
+ /**
+ * Port to listen on
+ */
private int port_ = 0;
+ /**
+ * Timeout for client sockets from accept
+ */
+ private int clientTimeout_ = 0;
+
+ /**
+ * Creates a server socket from underlying socket object
+ */
public TServerSocket(ServerSocket serverSocket) {
+ this(serverSocket, 0);
+ }
+
+ /**
+ * Creates a server socket from underlying socket object
+ */
+ public TServerSocket(ServerSocket serverSocket, int clientTimeout) {
serverSocket_ = serverSocket;
+ clientTimeout_ = clientTimeout;
}
+ /**
+ * Creates just a port listening server socket
+ */
public TServerSocket(int port) throws TTransportException {
+ this(port, 0);
+ }
+
+ /**
+ * Creates just a port listening server socket
+ */
+ public TServerSocket(int port, int clientTimeout) throws TTransportException {
port_ = port;
+ clientTimeout_ = clientTimeout;
try {
+ // Make server socket
serverSocket_ = new ServerSocket();
+ // Prevent 2MSL delay problem on server restarts
serverSocket_.setReuseAddress(true);
- serverSocket_.setSoTimeout(0);
+ // Bind to listening port
serverSocket_.bind(new InetSocketAddress(port_));
} catch (IOException ioe) {
serverSocket_ = null;
}
}
- public void listen() throws TTransportException {}
+ public void listen() throws TTransportException {
+ // Make sure not to block on accept
+ if (serverSocket_ != null) {
+ try {
+ serverSocket_.setSoTimeout(0);
+ } catch (SocketException sx) {
+ sx.printStackTrace();
+ }
+ }
+ }
protected TSocket acceptImpl() throws TTransportException {
if (serverSocket_ == null) {
}
try {
Socket result = serverSocket_.accept();
- return new TSocket(result);
+ TSocket result2 = new TSocket(result);
+ result2.setTimeout(clientTimeout_);
+ return result2;
} catch (IOException iox) {
throw new TTransportException(iox);
}
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
+import java.net.SocketException;
/**
* Socket implementation of the TTransport interface. To be commented soon!
*/
public class TSocket extends TIOStreamTransport {
- /** Wrapped Socket object */
+ /**
+ * Wrapped Socket object
+ */
private Socket socket_ = null;
- /** Remote host */
+ /**
+ * Remote host
+ */
private String host_ = null;
- /** Remote port */
+ /**
+ * Remote port
+ */
private int port_ = 0;
+ /**
+ * Socket timeout
+ */
+ private int timeout_ = 0;
+
/**
* Constructor that takes an already created socket.
*
*/
public TSocket(Socket socket) throws TTransportException {
socket_ = socket;
+
if (isOpen()) {
try {
inputStream_ = new BufferedInputStream(socket_.getInputStream(), 1024);
* @param port Remote port
*/
public TSocket(String host, int port) {
+ this(host, port, 500);
+ }
+
+ /**
+ * Creates a new unconnected socket that will connect to the given host
+ * on the given port.
+ *
+ * @param host Remote host
+ * @param port Remote port
+ * @param timeout Socket timeout
+ */
+ public TSocket(String host, int port, int timeout) {
socket_ = new Socket();
host_ = host;
port_ = port;
+ timeout_ = timeout;
+ }
+
+ /**
+ * Sets the socket timeout
+ *
+ * @param timeout Milliseconds timeout
+ */
+ public void setTimeout(int timeout) {
+ timeout_ = timeout;
+ try {
+ socket_.setSoTimeout(timeout);
+ } catch (SocketException sx) {
+ sx.printStackTrace();
+ }
}
/**