1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// found in the LICENSE file. 4ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#ifndef NET_SOCKET_TCP_SERVER_SOCKET_WIN_H_ 6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#define NET_SOCKET_TCP_SERVER_SOCKET_WIN_H_ 7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include <winsock2.h> 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/message_loop.h" 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/scoped_ptr.h" 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/win/object_watcher.h" 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/threading/non_thread_safe.h" 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "net/base/net_log.h" 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "net/socket/server_socket.h" 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace net { 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass IPEndPoint; 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass TCPServerSocketWin : public ServerSocket, 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public base::NonThreadSafe, 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public base::win::ObjectWatcher::Delegate { 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TCPServerSocketWin(net::NetLog* net_log, 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const net::NetLog::Source& source); 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ~TCPServerSocketWin(); 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // net::ServerSocket implementation. 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual int Listen(const net::IPEndPoint& address, int backlog); 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual int GetLocalAddress(IPEndPoint* address) const; 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual int Accept(scoped_ptr<ClientSocket>* socket, 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CompletionCallback* callback); 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // base::ObjectWatcher::Delegate implementation. 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnObjectSignaled(HANDLE object); 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int AcceptInternal(scoped_ptr<ClientSocket>* socket); 40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void Close(); 41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SOCKET socket_; 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen HANDLE socket_event_; 44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen base::win::ObjectWatcher accept_watcher_; 46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<ClientSocket>* accept_socket_; 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CompletionCallback* accept_callback_; 49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen BoundNetLog net_log_; 51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} // namespace net 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#endif // NET_SOCKET_TCP_SERVER_SOCKET_WIN_H_ 56