1// Copyright 2013 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_SOCKET_DESCRIPTOR_H_ 6#define NET_SOCKET_SOCKET_DESCRIPTOR_H_ 7 8#include "build/build_config.h" 9#include "net/base/net_export.h" 10 11#if defined(OS_WIN) 12#include <winsock2.h> 13#endif // OS_WIN 14 15namespace net { 16 17#if defined(OS_POSIX) 18typedef int SocketDescriptor; 19const SocketDescriptor kInvalidSocket = -1; 20#elif defined(OS_WIN) 21typedef SOCKET SocketDescriptor; 22const SocketDescriptor kInvalidSocket = INVALID_SOCKET; 23#endif 24 25// Interface to create native socket. 26// Usually such factories are used for testing purposes, which is not true in 27// this case. This interface is used to substitute WSASocket/socket to make 28// possible execution of some network code in sandbox. 29class NET_EXPORT PlatformSocketFactory { 30 public: 31 PlatformSocketFactory(); 32 virtual ~PlatformSocketFactory(); 33 34 // Replace WSASocket/socket with given factory. The factory will be used by 35 // CreatePlatformSocket. 36 static void SetInstance(PlatformSocketFactory* factory); 37 38 // Creates socket. See WSASocket/socket documentation of parameters. 39 virtual SocketDescriptor CreateSocket(int family, int type, int protocol) = 0; 40}; 41 42// Creates socket. See WSASocket/socket documentation of parameters. 43SocketDescriptor NET_EXPORT CreatePlatformSocket(int family, 44 int type, 45 int protocol); 46 47} // namespace net 48 49#endif // NET_SOCKET_SOCKET_DESCRIPTOR_H_ 50