package org.apache.thrift.transport;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger LOGGER = LoggerFactory
.getLogger(TSaneServerSocket.class);
private ServerSocket serverSocket_ = null;
final InetSocketAddress bindAddr;
private int clientTimeout_ = 0;
this(port, 0);
}
throws TTransportException {
this(new InetSocketAddress(port), clientTimeout);
}
throws TTransportException {
this(bindAddr, 0);
}
throws TTransportException {
clientTimeout_ = clientTimeout;
this.bindAddr = bindAddr;
}
private void bind()
throws TTransportException {
try {
serverSocket_ = new ServerSocket();
serverSocket_.setReuseAddress(true);
serverSocket_.bind(bindAddr);
} catch (IOException ioe) {
serverSocket_ = null;
throw new TTransportException("Could not create ServerSocket on address "
+ bindAddr.toString() + ".");
}
}
public void listen()
throws TTransportException {
bind();
if (serverSocket_ != null) {
try {
serverSocket_.setSoTimeout(0);
} catch (SocketException sx) {
LOGGER.error("Could not set socket timeout.", sx);
}
}
}
protected TTransport
acceptImpl()
throws TTransportException {
if (serverSocket_ == null) {
throw new TTransportException(TTransportException.NOT_OPEN,
"No underlying server socket.");
}
try {
Socket result = serverSocket_.accept();
TSocket result2 = new TSocket(result);
result2.setTimeout(clientTimeout_);
return result2;
} catch (IOException iox) {
throw new TTransportException(iox);
}
}
if (serverSocket_ != null) {
try {
serverSocket_.close();
} catch (IOException iox) {
LOGGER.warn("Could not close server socket.", iox);
}
serverSocket_ = null;
}
}
close();
}
}