// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef NET_SOCKET_UDP_SOCKET_H_
#define NET_SOCKET_UDP_SOCKET_H_

#include "build/build_config.h"

#if defined(OS_WIN)
#include "net/socket/udp_socket_win.h"
#elif defined(OS_POSIX) || defined(OS_FUCHSIA)
#include "net/socket/udp_socket_posix.h"
#elif defined(STARBOARD)
#include "net/socket/udp_socket_starboard.h"
#endif

namespace net {

// UDPSocket
// Accessor API for a UDP socket in either client or server form.
//
// Client form:
// In this case, we're connecting to a specific server, so the client will
// usually use:
//       Open(address_family)  // Open a socket.
//       Connect(address)      // Connect to a UDP server
//       Read/Write            // Reads/Writes all go to a single destination
//
// Server form:
// In this case, we want to read/write to many clients which are connecting
// to this server.  First the server 'binds' to an addres, then we read from
// clients and write responses to them.
// Example:
//       Open(address_family)  // Open a socket.
//       Bind(address/port)    // Binds to port for reading from clients
//       RecvFrom/SendTo       // Each read can come from a different client
//                             // Writes need to be directed to a specific
//                             // address.
#if defined(OS_WIN)
typedef UDPSocketWin UDPSocket;
#elif defined(OS_POSIX) || defined(OS_FUCHSIA)
typedef UDPSocketPosix UDPSocket;
#elif defined(STARBOARD)
typedef UDPSocketStarboard UDPSocket;
#endif

}  // namespace net

#endif  // NET_SOCKET_UDP_SOCKET_H_
