Rev 30 | Blame | Compare with Previous | Last modification | View Log | RSS feed
/*** Licensed to the Apache Software Foundation (ASF) under one* or more contributor license agreements. See the NOTICE file* distributed with this work for additional information* regarding copyright ownership. The ASF licenses this file* to you under the Apache License, Version 2.0 (the* "License"); you may not use this file except in compliance* with the License. You may obtain a copy of the License at** http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing,* software distributed under the License is distributed on an* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY* KIND, either express or implied. See the License for the* specific language governing permissions and limitations* under the License.** Contains some contributions under the Thrift Software License.* Please see doc/old-thrift-license.txt in the Thrift distribution for* details.*/using System;using System.Net.Sockets;namespace Thrift.Transport{public class TServerSocket : TServerTransport{/*** Underlying server with socket*/private TcpListener server = null;/*** Port to listen on*/private int port = 0;/*** Timeout for client sockets from accept*/private int clientTimeout = 0;/*** Whether or not to wrap new TSocket connections in buffers*/private bool useBufferedSockets = false;/*** Creates a server socket from underlying socket object*/public TServerSocket(TcpListener listener):this(listener, 0){}/*** Creates a server socket from underlying socket object*/public TServerSocket(TcpListener listener, int clientTimeout){this.server = listener;this.clientTimeout = clientTimeout;}/*** Creates just a port listening server socket*/public TServerSocket(int port): this(port, 0){}/*** Creates just a port listening server socket*/public TServerSocket(int port, int clientTimeout):this(port, clientTimeout, false){}public TServerSocket(int port, int clientTimeout, bool useBufferedSockets){this.port = port;this.clientTimeout = clientTimeout;this.useBufferedSockets = useBufferedSockets;try{// Make server socketserver = new TcpListener(System.Net.IPAddress.Any, this.port);}catch (Exception){server = null;throw new TTransportException("Could not create ServerSocket on port " + port + ".");}}public override void Listen(){// Make sure not to block on acceptif (server != null){try{server.Start();}catch (SocketException sx){throw new TTransportException("Could not accept on listening socket: " + sx.Message);}}}protected override TTransport AcceptImpl(){if (server == null){throw new TTransportException(TTransportException.ExceptionType.NotOpen, "No underlying server socket.");}try{TcpClient result = server.AcceptTcpClient();TSocket result2 = new TSocket(result);result2.Timeout = clientTimeout;if (useBufferedSockets){TBufferedTransport result3 = new TBufferedTransport(result2);return result3;}else{return result2;}}catch (Exception ex){throw new TTransportException(ex.ToString());}}public override void Close(){if (server != null){try{server.Stop();}catch (Exception ex){throw new TTransportException("WARNING: Could not close server socket: " + ex);}server = null;}}}}