21#include "../end_point.hpp"
22#include "../ip_address.hpp"
23#include "../../collections/generic/ilist.hpp"
24#include "../../threading/manual_reset_event.hpp"
25#include "../../core_export.hpp"
26#include "../../argument_exception.hpp"
27#include "../../async_callback.hpp"
28#include "../../array.hpp"
29#include "../../iasync_result.hpp"
30#include "../../iequatable.hpp"
31#include "../../not_implemented_exception.hpp"
32#include "../../not_supported_exception.hpp"
33#include "../../object.hpp"
34#include "../../types.hpp"
35#include "../../string.hpp"
46 class socket_async_event_args;
80 explicit async_result_socket(std::any async_state) : async_state_(async_state) {}
81 std::any async_state()
const noexcept override {
return async_state_;}
83 bool completed_synchronously()
const noexcept override {
return false;}
84 bool is_completed()
const noexcept override {
return is_completed_;};
86 std::any async_state_;
87 bool is_completed_ =
false;
90 std::exception_ptr exception_;
94 class async_result_accept :
public async_result_socket {
96 explicit async_result_accept(std::any async_state) : async_result_socket(async_state) {}
101 class async_result_connect :
public async_result_socket {
103 explicit async_result_connect(std::any async_state) : async_result_socket(async_state) {}
107 class async_result_disconnect :
public async_result_socket {
109 explicit async_result_disconnect(std::any async_state) : async_result_socket(async_state) {}
113 class async_result_receive :
public async_result_socket {
115 explicit async_result_receive(std::any async_state) : async_result_socket(async_state) {}
116 size_t number_of_bytes_received_ = 0;
120 class async_result_receive_from :
public async_result_socket {
122 explicit async_result_receive_from(std::any async_state) : async_result_socket(async_state) {}
124 size_t number_of_bytes_received_ = 0;
128 class async_result_receive_message_from :
public async_result_socket {
130 explicit async_result_receive_message_from(std::any async_state) : async_result_socket(async_state) {}
133 size_t number_of_bytes_received_ = 0;
138 class async_result_send :
public async_result_socket {
140 explicit async_result_send(std::any async_state) : async_result_socket(async_state) {}
141 size_t number_of_bytes_sent_ = 0;
145 class async_result_send_to :
public async_result_socket {
147 explicit async_result_send_to(std::any async_state) : async_result_socket(async_state) {}
148 size_t number_of_bytes_sent_ = 0;
205 size_t available() const;
214 bool blocking() const;
230 bool connected() const noexcept;
238 bool dont_fragment() const;
254 bool dual_mode() const;
271 bool enable_broadcast() const;
290 bool exclusive_address_use() const;
301 socket& exclusive_address_use(
bool value);
310 bool is_bound() const noexcept;
365 bool multicast_loopback() const;
385 bool no_delay() const;
408 size_t receive_buffer_size() const;
416 socket& receive_buffer_size(
size_t value);
448 size_t send_buffer_size() const;
509 static
bool os_supports_ip_v4() noexcept;
514 static
bool os_supports_ip_v6() noexcept;
582 template<class end_point_t>
584 return begin_connect_(xtd::new_sptr<end_point_t>(remote_end_point), callback, state);
799 template<
class end_po
int_t>
800 void bind(
const end_point_t& local_end_point) {
801 bind_(xtd::new_sptr<end_point_t>(local_end_point));
820 template<
class end_po
int_t>
821 void connect(
const end_point_t& remote_end_point) {
822 connect_(xtd::new_sptr<end_point_t>(remote_end_point));
Contains xtd::net::sockets::address_family enum.
Provides methods for creating, manipulating, searching, and sorting arrays, thereby serving as the ba...
Definition array.hpp:59
Represents text as a sequence of character units.
Definition basic_string.hpp:71
Represents a collection of objects that can be individually accessed by index.
Definition ilist.hpp:41
Represents the status of an asynchronous operation.
Definition iasync_result.hpp:25
Defines a generalized method that a value type or class implements to create a type-specific method f...
Definition iequatable.hpp:22
Identifies a network address. This is an abstract class.
Definition end_point.hpp:27
Provides an Internet Protocol (IP) address.
Definition ip_address.hpp:42
Contains option values for joining an IPv6 multicast group.
Definition ip_v6_multicast_option.hpp:33
Specifies whether a xtd::net::sockets::socket will remain connected after a call to the xtd::net::soc...
Definition linger_option.hpp:35
Contains IPAddress values used to join and drop multicast groups.
Definition multicast_option.hpp:39
Represents an asynchronous socket operation.
Definition socket_async_event_args.hpp:54
Implements the Berkeley sockets interface.
Definition socket.hpp:76
void set_raw_socket_option(int32 socket_option_level, int32 socket_option_name, intptr option_value, size_t option_value_size)
Sets a socket option value using platform-specific level and name identifiers.
socket(intptr handle)
Initializes a new instance of the xtd::net::sockets::socket class for the specified socket handle.
void bind(const end_point_t &local_end_point)
Associates a xtd::net::sockets::socket with a local endpoint.
Definition socket.hpp:800
xtd::net::sockets::ip_v6_multicast_option get_socket_ip_v6_multicast_option(xtd::net::sockets::socket_option_name socket_option_name) const
Returns the multicast xtd::net::sockets::socket option, represented as xtd::net::sockets::ip_v6_multi...
void set_socket_option(xtd::net::sockets::socket_option_name socket_option_name, const xtd::net::sockets::multicast_option &option_value)
Sets the linger xtd::net::sockets::socket option to the specified integer value.
size_t io_control(int32 io_control_code, xtd::array< xtd::byte > &option_in_value, xtd::array< xtd::byte > &option_out_value)
Sets low-level operating modes for the xtd::net::sockets::socket using numerical control codes.
xtd::sptr< xtd::iasync_result > begin_send_to(const xtd::array< xtd::byte > &buffer, size_t offset, size_t size, xtd::net::sockets::socket_flags socket_flags, const xtd::net::end_point &remote_end_point, xtd::async_callback callback, const std::any &state)
Sends data asynchronously to a specific remote host.
xtd::sptr< xtd::iasync_result > begin_receive_message_from(xtd::array< xtd::byte > &buffer, size_t offset, size_t size, xtd::net::sockets::socket_flags socket_flags, xtd::net::end_point &remote_end_point, xtd::async_callback callback, const std::any &state)
Begins to asynchronously receive the specified number of bytes of data into the specified location of...
xtd::net::sockets::multicast_option get_socket_multicast_option(xtd::net::sockets::socket_option_name socket_option_name) const
Returns the multicast xtd::net::sockets::socket option, represented as xtd::net::sockets::multicast_o...
socket(xtd::net::sockets::address_family address_family, xtd::net::sockets::socket_type socket_type, xtd::net::sockets::protocol_type protocol_type)
Initializes a new instance of the xtd::net::sockets::socket class using the specified address family,...
xtd::sptr< xtd::iasync_result > begin_send(const xtd::array< xtd::byte > &buffer, size_t offset, size_t size, xtd::net::sockets::socket_flags socket_flags, xtd::net::sockets::socket_error &error_code, xtd::async_callback callback, const std::any &state)
Sends data asynchronously to a connected xtd::net::sockets::socket::socket.
bool equals(const socket &other) const noexcept override
Determines whether the specified object is equal to the current object.
size_t receive(xtd::array< xtd::byte > &buffer, xtd::net::sockets::socket_flags socket_flags)
Receives data from a bound xtd::net::sockets::socket into a receive buffer, using the specified xtd::...
bool equals(const xtd::object &obj) const noexcept override
Determines whether the specified object is equal to the current object.
size_t end_send_to(xtd::sptr< xtd::iasync_result > async_result)
Ends a pending asynchronous send to a specific location.
size_t send(const xtd::array< xtd::byte > &buffer, size_t offset, size_t size, xtd::net::sockets::socket_flags socket_flags, xtd::net::sockets::socket_error &error_code)
Sends the specified number of bytes of data to a connected xtd::net::sockets::socket,...
int32 get_socket_option(xtd::net::sockets::socket_option_level socket_option_level, xtd::net::sockets::socket_option_name socket_option_name) const
Returns the value of a specified xtd::net::sockets::socket option, represented as integer.
size_t send(const xtd::array< xtd::byte > &buffer, xtd::net::sockets::socket_flags socket_flags)
Sends data to a connected xtd::net::sockets::socket using the specified xtd::net::sockets::socket_fla...
size_t send(const xtd::array< xtd::byte > &buffer)
Sends data to a connected xtd::net::sockets::socket.
bool poll(int32 micro_seconds, xtd::net::sockets::select_mode mode)
Determines the status of the xtd::net::sockets::socket.
xtd::sptr< xtd::iasync_result > begin_connect(const xtd::array< xtd::net::ip_address > &addresses, uint16 port, xtd::async_callback callback, const std::any &state)
Begins an asynchronous request for a remote host connection. The host is specified by an xtd::net::ip...
size_t end_send(xtd::sptr< xtd::iasync_result > async_result, xtd::net::sockets::socket_error &error_code)
Ends a pending asynchronous send.
size_t send_to(const xtd::array< xtd::byte > &buffer, size_t size, xtd::net::sockets::socket_flags socket_flags, const xtd::net::end_point &remote_end_point)
Sends the specified number of bytes of data to the specified endpoint using the specified xtd::net::s...
void end_connect(xtd::sptr< xtd::iasync_result > async_result)
Ends a pending asynchronous connection request.
void listen(size_t backlog)
Places a xtd::net::sockets::socket in a listening state.
void set_socket_option(xtd::net::sockets::socket_option_level socket_option_level, xtd::net::sockets::socket_option_name socket_option_name, bool option_value)
Sets the specified xtd::net::sockets::socket option to the specified integer value.
void end_disconnect(xtd::sptr< xtd::iasync_result > async_result)
Ends a pending asynchronous disconnect request.
xtd::sptr< xtd::iasync_result > begin_connect(const xtd::net::ip_address &address, uint16 port, xtd::async_callback callback, const std::any &state)
Begins an asynchronous request for a remote host connection. The host is specified by an xtd::net::ip...
void connect(const xtd::string &host, uint16 port)
Establishes a connection to a remote host. The host is specified by a host name and a port number.
static size_t select(xtd::collections::generic::ilist< socket > &check_read, xtd::collections::generic::ilist< socket > &check_write, xtd::collections::generic::ilist< socket > &check_error, int32 microseconds)
Determines the status of one or more sockets.
size_t receive(xtd::array< xtd::byte > &buffer, size_t offset, size_t size, xtd::net::sockets::socket_flags socket_flags)
Receives the specified number of bytes from a bound xtd::net::sockets::socket into the specified offs...
xtd::net::sockets::address_family address_family() const noexcept
Gets the address family of the xtd::net::sockets::socket.
void shutdown(xtd::net::sockets::socket_shutdown how)
Disables sends and receives on a xtd::net::sockets::socket.
xtd::sptr< xtd::iasync_result > begin_disconnect(bool reuse_socket, xtd::async_callback callback, const std::any &state)
Begins an asynchronous request to disconnect from a remote endpoint.
void set_socket_option(xtd::net::sockets::socket_option_name socket_option_name, const xtd::net::sockets::ip_v6_multicast_option &option_value)
Sets the linger xtd::net::sockets::socket option to the specified integer value.
void connect(const xtd::net::ip_address &address, uint16 port)
Establishes a connection to a remote host. The host is specified by an IP address and a port number.
size_t receive(xtd::array< xtd::byte > &buffer, size_t offset, size_t size, xtd::net::sockets::socket_flags socket_flags, xtd::net::sockets::socket_error &error)
Receives the specified number of bytes from a bound xtd::net::sockets::socket into the specified offs...
xtd::sptr< xtd::iasync_result > begin_receive(xtd::array< xtd::byte > &buffer, size_t offset, size_t size, xtd::net::sockets::socket_flags socket_flags, xtd::async_callback callback, const std::any &state)
Begins to asynchronously receive data from a connected xtd::net::sockets::socket::socket.
size_t send_to(const xtd::array< xtd::byte > &buffer, size_t offset, size_t size, xtd::net::sockets::socket_flags socket_flags, const xtd::net::end_point &remote_end_point)
Sends the specified number of bytes of data to the specified endpoint, starting at the specified loca...
void set_socket_option(xtd::net::sockets::socket_option_level socket_option_level, xtd::net::sockets::socket_option_name socket_option_name, int32 option_value)
Sets the specified xtd::net::sockets::socket option to the specified integer value.
xtd::sptr< xtd::iasync_result > begin_connect(const xtd::string &host, uint16 port, xtd::async_callback callback, const std::any &state)
Begins an asynchronous request for a remote host connection. The host is specified by a host name and...
void connect(const xtd::array< xtd::net::ip_address > &addresses, uint16 port)
Establishes a connection to a remote host. The host is specified by an array of IP addresses and a po...
void close()
Closes the xtd::net::sockets::socket connection and releases all associated resources.
void connect(const end_point_t &remote_end_point)
Establishes a connection to a remote host.
Definition socket.hpp:821
xtd::net::sockets::linger_option get_socket_linger_option() const
Returns the linger xtd::net::sockets::socket option, represented as xtd::net::sockets::linger_option.
size_t end_receive_message_from(xtd::sptr< xtd::iasync_result > async_result, xtd::net::sockets::socket_flags &socket_flags, xtd::sptr< xtd::net::end_point > &end_point, xtd::net::sockets::ip_packet_information &ip_packet_information)
Ends a pending asynchronous read from a specific endpoint. This method also reveals more information ...
void disconnect(bool reuse_socket)
Closes the socket connection and allows reuse of the socket.
size_t io_control(xtd::net::sockets::io_control_code io_control_code, xtd::array< xtd::byte > &option_in_value, xtd::array< xtd::byte > &option_out_value)
Sets low-level operating modes for the xtd::net::sockets::socket using xtd::net::sockets::io_control_...
void set_socket_option(xtd::net::sockets::linger_option option_value)
Sets the linger xtd::net::sockets::socket option to the specified integer value.
size_t receive_from(xtd::array< xtd::byte > &buffer, xtd::net::end_point &remote_end_point)
Receives data from a bound xtd::net::sockets::socket into a receive buffer.
socket(const xtd::net::sockets::socket_information &socket_information)
Initializes a new instance of the xtd::net::sockets::socket class using the specified value returned ...
socket end_accept(xtd::sptr< xtd::iasync_result > async_result)
Asynchronously accepts an incoming connection attempt and creates a new xtd::net::sockets::socket::so...
size_t get_raw_socket_option(int32 socket_option_level, int32 socket_option_name, intptr option_value, size_t size_option_value) const
Gets a socket option value using platform-specific level and name identifiers.
size_t send_to(const xtd::array< xtd::byte > &buffer, xtd::net::sockets::socket_flags socket_flags, const xtd::net::end_point &remote_end_point)
Sends data to a specific endpoint using the specified xtd::net::sockets::socket_flags.
size_t receive(xtd::array< xtd::byte > &buffer)
Receives data from a bound xtd::net::sockets::socket into a receive buffer.
size_t receive_from(xtd::array< xtd::byte > &buffer, size_t offset, size_t size, xtd::net::sockets::socket_flags socket_flags, xtd::net::end_point &remote_end_point)
Receives data from a bound xtd::net::sockets::socket into a receive buffer.
socket()
Initializes a new instance of the xtd::net::sockets::socket class.
size_t send(const xtd::array< xtd::byte > &buffer, size_t size, xtd::net::sockets::socket_flags socket_flags)
Sends the specified number of bytes of data to a connected xtd::net::sockets::socket,...
size_t end_send(xtd::sptr< xtd::iasync_result > async_result)
Ends a pending asynchronous send.
void listen()
Places a xtd::net::sockets::socket in a listening state.
size_t end_receive(xtd::sptr< xtd::iasync_result > async_result, xtd::net::sockets::socket_error &error_code)
Ends a pending asynchronous read.
size_t receive(xtd::array< xtd::byte > &buffer, size_t size, xtd::net::sockets::socket_flags socket_flags)
Receives the specified number of bytes of data from a bound xtd::net::sockets::socket into a receive ...
size_t end_receive_from(xtd::sptr< xtd::iasync_result > async_result, xtd::sptr< xtd::net::end_point > &end_point)
Ends a pending asynchronous read from a specific endpoint.
size_t receive_from(xtd::array< xtd::byte > &buffer, xtd::net::sockets::socket_flags socket_flags, xtd::net::end_point &remote_end_point)
Receives data from a bound xtd::net::sockets::socket into a receive buffer.
xtd::sptr< xtd::iasync_result > begin_receive(xtd::array< xtd::byte > &buffer, size_t offset, size_t size, xtd::net::sockets::socket_flags socket_flags, xtd::net::sockets::socket_error &error_code, xtd::async_callback callback, const std::any &state)
Begins to asynchronously receive data from a connected xtd::net::sockets::socket::socket.
void set_ip_protection_level(xtd::net::sockets::ip_protection_level level)
Sets the IP protection level on a socket.
size_t receive_from(xtd::array< xtd::byte > &buffer, size_t size, xtd::net::sockets::socket_flags socket_flags, xtd::net::end_point &remote_end_point)
Receives data from a bound xtd::net::sockets::socket into a receive buffer.
socket(xtd::net::sockets::socket_type socket_type, xtd::net::sockets::protocol_type protocol_type)
Initializes a new instance of the xtd::net::sockets::socket class using the specified socket type and...
xtd::sptr< xtd::iasync_result > begin_receive_from(xtd::array< xtd::byte > &buffer, size_t offset, size_t size, xtd::net::sockets::socket_flags socket_flags, xtd::net::end_point &remote_end_point, xtd::async_callback callback, const std::any &state)
Begins to asynchronously receive data from a specified network device.
size_t send_to(const xtd::array< xtd::byte > &buffer, const xtd::net::end_point &remote_end_point)
Sends data to the specified endpoint.
xtd::sptr< xtd::iasync_result > begin_send(const xtd::array< xtd::byte > &buffer, size_t offset, size_t size, xtd::net::sockets::socket_flags socket_flags, xtd::async_callback callback, const std::any &state)
Sends data asynchronously to a connected xtd::net::sockets::socket::socket.
size_t send(const xtd::array< xtd::byte > &buffer, size_t offset, size_t size, xtd::net::sockets::socket_flags socket_flags)
Sends the specified number of bytes of data to a connected xtd::net::sockets::socket,...
size_t end_receive(xtd::sptr< xtd::iasync_result > async_result)
Ends a pending asynchronous read.
Supports all classes in the xtd class hierarchy and provides low-level services to derived classes....
Definition object.hpp:44
Represents a thread synchronization event that, when signaled, must be reset manually....
Definition manual_reset_event.hpp:35
Encapsulates operating system specific objects that wait for exclusive access to shared resources.
Definition wait_handle.hpp:52
xtd::delegate< void(async_result ar)> async_callback
References a method to be called when a corresponding asynchronous operation completes.
Definition delegate.hpp:39
#define core_export_
Define shared library export.
Definition core_export.hpp:13
int32_t int32
Represents a 32-bit signed integer.
Definition int32.hpp:23
size_t size
Represents a size of any object in bytes.
Definition size.hpp:23
intmax_t intptr
Represent a pointer or a handle.
Definition intptr.hpp:23
std::shared_ptr< type_t > sptr
The xtd::sptr object is a shared pointer.
Definition sptr.hpp:25
uint16_t uint16
Represents a 16-bit unsigned integer.
Definition uint16.hpp:23
socket_error
Defines error codes for the xtd::net::sockets::socket class.
Definition socket_error.hpp:30
xtd::sptr< xtd::iasync_result > async_result
Represents the status of an asynchronous operation.
Definition async_result.hpp:19
address_family
Specifies the addressing scheme that an instance of the xtd::net::sockets::socket class can use.
Definition address_family.hpp:30
socket_option_level
Defines socket option levels for the xtd::net::sockets::socket::set_socket_option and xtd::net::socke...
Definition socket_option_level.hpp:31
socket_option_name
Defines configuration option names.
Definition socket_option_name.hpp:31
ip_protection_level
A value that enables restriction of an IPv6 socket to a specified scope, such as addresses with the s...
Definition ip_protection_level.hpp:31
protocol_type
Specifies the protocols that the xtd::net::sockets::socket class supports.
Definition protocol_type.hpp:30
socket_flags
Specifies socket send and receive behaviors. This enumeration has a flags attribute that allows a bit...
Definition socket_flags.hpp:30
select_mode
Defines the polling modes for the xtd::net::sockets::socket::poll method.
Definition select_mode.hpp:31
socket_type
Specifies the type of socket that an instance of the xtd::net::sockets::socket class represents.
Definition socket_type.hpp:32
socket_shutdown
Defines constants that are used by the xtd::net::sockets::socket::shutdown method.
Definition socket_shutdown.hpp:31
io_control_code
Specifies the IO control codes supported by the xtd::net::sockets::socket::io_control method.
Definition io_control_code.hpp:30
@ success
Operation successful.
@ receive_message_from
A socket receive_message_from operation.
@ none
Use no flags for this call.
Contains xtd::net::sockets::io_control_code enum.
Contains xtd::net::sockets::ip_protection_level enum.
Contains xtd::net::sockets::ip_v6_multicast_option class.
Contains xtd::net::sockets::linger_option class.
Contains xtd::net::sockets::multicast_option class.
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition xtd_about_box.hpp:10
Contains xtd::net::sockets::protocol_type enum.
Contains xtd::net::sockets::select_mode enum.
Contains xtd::net::sockets::socket_error enum.
Contains xtd::net::sockets::socket_flags enum.
Contains xtd::net::sockets::socket_option_level enum.
Contains xtd::net::sockets::socket_option_name enum.
Contains xtd::net::sockets::socket_shutdown enum.
Contains xtd::net::sockets::socket_type enum.