blob: 8a8421d245ed537272884d39dcc270c834223ece [file] [log] [blame]
Mark Slee83c52a82006-06-07 06:51:18 +00001package com.facebook.thrift.transport;
2
3import java.io.IOException;
Mark Sleeffcddd62006-09-06 20:37:03 +00004import java.net.InetSocketAddress;
Mark Slee83c52a82006-06-07 06:51:18 +00005import java.net.ServerSocket;
6import java.net.Socket;
7
8/**
9 * Wrapper around ServerSocket for Thrift.
10 *
11 * @author Mark Slee <mcslee@facebook.com>
12 */
13public class TServerSocket extends TServerTransport {
14
Mark Sleeffcddd62006-09-06 20:37:03 +000015 private ServerSocket serverSocket_ = null;
16 private int port_ = 0;
17
Mark Slee83c52a82006-06-07 06:51:18 +000018 public TServerSocket(ServerSocket serverSocket) {
19 serverSocket_ = serverSocket;
20 }
21
Mark Sleeffcddd62006-09-06 20:37:03 +000022 public TServerSocket(int port) throws TTransportException {
23 port_ = port;
24 try {
25 serverSocket_ = new ServerSocket();
26 serverSocket_.setReuseAddress(true);
27 serverSocket_.setSoTimeout(0);
28 serverSocket_.bind(new InetSocketAddress(port_));
29 } catch (IOException ioe) {
30 serverSocket_ = null;
31 throw new TTransportException("Could not create ServerSocket on port " + port + ".");
32 }
33 }
34
Mark Slee83c52a82006-06-07 06:51:18 +000035 public void listen() throws TTransportException {}
36
37 protected TSocket acceptImpl() throws TTransportException {
38 if (serverSocket_ == null) {
39 throw new TTransportException("No underlying server socket.");
40 }
41 try {
42 Socket result = serverSocket_.accept();
43 return new TSocket(result);
44 } catch (IOException iox) {
45 throw new TTransportException(iox);
46 }
47 }
48
49 public void close() {
50 if (serverSocket_ != null) {
51 try {
52 serverSocket_.close();
53 } catch (IOException iox) {
54 System.err.println("WARNING: Could not close server socket: " +
55 iox.getMessage());
56 }
57 serverSocket_ = null;
58 }
59 }
60
61}