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_WIN_H_ 6#define NET_SOCKET_TCP_SERVER_SOCKET_WIN_H_ 7 8#include <winsock2.h> 9 10#include "base/message_loop.h" 11#include "base/scoped_ptr.h" 12#include "base/win/object_watcher.h" 13#include "base/threading/non_thread_safe.h" 14#include "net/base/net_log.h" 15#include "net/socket/server_socket.h" 16 17namespace net { 18 19class IPEndPoint; 20 21class TCPServerSocketWin : public ServerSocket, 22 public base::NonThreadSafe, 23 public base::win::ObjectWatcher::Delegate { 24 public: 25 TCPServerSocketWin(net::NetLog* net_log, 26 const net::NetLog::Source& source); 27 ~TCPServerSocketWin(); 28 29 // net::ServerSocket implementation. 30 virtual int Listen(const net::IPEndPoint& address, int backlog); 31 virtual int GetLocalAddress(IPEndPoint* address) const; 32 virtual int Accept(scoped_ptr<ClientSocket>* socket, 33 CompletionCallback* callback); 34 35 // base::ObjectWatcher::Delegate implementation. 36 virtual void OnObjectSignaled(HANDLE object); 37 38 private: 39 int AcceptInternal(scoped_ptr<ClientSocket>* socket); 40 void Close(); 41 42 SOCKET socket_; 43 HANDLE socket_event_; 44 45 base::win::ObjectWatcher accept_watcher_; 46 47 scoped_ptr<ClientSocket>* accept_socket_; 48 CompletionCallback* accept_callback_; 49 50 BoundNetLog net_log_; 51}; 52 53} // namespace net 54 55#endif // NET_SOCKET_TCP_SERVER_SOCKET_WIN_H_ 56