1// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef NET_SOCKET_TCP_SERVER_SOCKET_H_ 6#define NET_SOCKET_TCP_SERVER_SOCKET_H_ 7 8#include "base/basictypes.h" 9#include "base/compiler_specific.h" 10#include "base/memory/scoped_ptr.h" 11#include "net/base/ip_endpoint.h" 12#include "net/base/net_export.h" 13#include "net/base/net_log.h" 14#include "net/socket/server_socket.h" 15#include "net/socket/tcp_socket.h" 16 17namespace net { 18 19class NET_EXPORT_PRIVATE TCPServerSocket : public ServerSocket { 20 public: 21 TCPServerSocket(NetLog* net_log, const NetLog::Source& source); 22 virtual ~TCPServerSocket(); 23 24 // net::ServerSocket implementation. 25 virtual int Listen(const IPEndPoint& address, int backlog) OVERRIDE; 26 virtual int GetLocalAddress(IPEndPoint* address) const OVERRIDE; 27 virtual int Accept(scoped_ptr<StreamSocket>* socket, 28 const CompletionCallback& callback) OVERRIDE; 29 30 private: 31 // Converts |accepted_socket_| and stores the result in 32 // |output_accepted_socket|. 33 // |output_accepted_socket| is untouched on failure. But |accepted_socket_| is 34 // set to NULL in any case. 35 int ConvertAcceptedSocket(int result, 36 scoped_ptr<StreamSocket>* output_accepted_socket); 37 // Completion callback for calling TCPSocket::Accept(). 38 void OnAcceptCompleted(scoped_ptr<StreamSocket>* output_accepted_socket, 39 const CompletionCallback& forward_callback, 40 int result); 41 42 TCPSocket socket_; 43 44 scoped_ptr<TCPSocket> accepted_socket_; 45 IPEndPoint accepted_address_; 46 bool pending_accept_; 47 48 DISALLOW_COPY_AND_ASSIGN(TCPServerSocket); 49}; 50 51} // namespace net 52 53#endif // NET_SOCKET_TCP_SERVER_SOCKET_H_ 54