21 #include "../end_point.h" 22 #include "../ip_address.h" 23 #include "../../threading/manual_reset_event.h" 24 #include "../../core_export.h" 25 #include "../../argument_exception.h" 26 #include "../../async_callback.h" 27 #include "../../iasync_result.h" 28 #include "../../iequatable.h" 29 #include "../../not_implemented_exception.h" 30 #include "../../not_supported_exception.h" 31 #include "../../object.h" 32 #include "../../types.h" 33 #include "../../ustring.h" 43 class socket_async_event_args;
75 explicit async_result_socket(
std::any async_state) : async_state_(async_state) {}
76 std::any async_state()
const noexcept
override {
return async_state_;}
78 bool completed_synchronously()
const noexcept
override {
return false;}
79 bool is_completed()
const noexcept
override {
return is_completed_;};
82 bool is_completed_ =
false;
85 std::exception_ptr exception_;
89 class async_result_accept :
public async_result_socket {
91 explicit async_result_accept(
std::any async_state) : async_result_socket(async_state) {}
96 class async_result_connect :
public async_result_socket {
98 explicit async_result_connect(
std::any async_state) : async_result_socket(async_state) {}
102 class async_result_disconnect :
public async_result_socket {
104 explicit async_result_disconnect(
std::any async_state) : async_result_socket(async_state) {}
108 class async_result_receive :
public async_result_socket {
110 explicit async_result_receive(
std::any async_state) : async_result_socket(async_state) {}
111 size_t number_of_bytes_received_ = 0;
115 class async_result_receive_from :
public async_result_socket {
117 explicit async_result_receive_from(
std::any async_state) : async_result_socket(async_state) {}
118 std::shared_ptr<xtd::net::end_point> end_point_;
119 size_t number_of_bytes_received_ = 0;
123 class async_result_receive_message_from :
public async_result_socket {
125 explicit async_result_receive_message_from(
std::any async_state) : async_result_socket(async_state) {}
126 std::shared_ptr<xtd::net::end_point> end_point_;
128 size_t number_of_bytes_received_ = 0;
133 class async_result_send :
public async_result_socket {
135 explicit async_result_send(
std::any async_state) : async_result_socket(async_state) {}
136 size_t number_of_bytes_sent_ = 0;
140 class async_result_send_to :
public async_result_socket {
142 explicit async_result_send_to(
std::any async_state) : async_result_socket(async_state) {}
143 size_t number_of_bytes_sent_ = 0;
200 size_t available()
const;
209 bool blocking()
const;
218 socket& blocking(
bool value);
249 bool dual_mode()
const;
257 socket& dual_mode(
bool value);
266 bool enable_broadcast()
const;
275 socket& enable_broadcast(
bool value);
300 intptr handle()
const noexcept;
305 bool is_bound()
const noexcept;
350 std::shared_ptr<xtd::net::end_point> local_end_point()
const;
395 static bool os_supports_ip_v4() noexcept;
400 static bool os_supports_ip_v6() noexcept;
413 size_t receive_buffer_size()
const;
421 socket& receive_buffer_size(
size_t value);
445 std::shared_ptr<xtd::net::end_point> remote_end_point()
const;
453 size_t send_buffer_size()
const;
461 socket& send_buffer_size(
size_t value);
573 template<
typename end_po
int_t>
575 return begin_connect_(std::make_shared<end_point_t>(remote_end_point), callback, state);
604 std::shared_ptr<xtd::iasync_result> begin_connect(
const std::vector<xtd::net::ip_address>& addresses,
uint16 port,
xtd::async_callback callback,
const std::any& state);
790 template<
typename end_po
int_t>
791 void bind(
const end_point_t& local_end_point) {
792 bind_(std::make_shared<end_point_t>(local_end_point));
811 template<
typename end_po
int_t>
812 void connect(
const end_point_t& remote_end_point) {
813 connect_(std::make_shared<end_point_t>(remote_end_point));
839 void connect(
const std::vector<xtd::net::ip_address>& addresses,
uint16 port);
883 void end_connect(std::shared_ptr<xtd::iasync_result> async_result);
892 void end_disconnect(std::shared_ptr<xtd::iasync_result> async_result);
908 size_t end_receive(std::shared_ptr<xtd::iasync_result> async_result);
936 size_t end_receive_from(std::shared_ptr<xtd::iasync_result> async_result, std::shared_ptr<xtd::net::end_point>&
end_point);
967 size_t end_send(std::shared_ptr<xtd::iasync_result> async_result);
996 size_t end_send_to(std::shared_ptr<xtd::iasync_result> async_result);
998 bool equals(
const socket&
s)
const noexcept
override;
1051 size_t io_control(
int32 io_control_code, std::vector<xtd::byte>& option_in_value, std::vector<xtd::byte>& option_out_value);
1069 void listen(
size_t backlog);
1108 size_t receive(std::vector<xtd::byte>& buffer);
1268 static size_t select(std::vector<socket>& check_read, std::vector<socket>& check_write, std::vector<socket>& check_error,
int32 microseconds);
1282 size_t send(
const std::vector<xtd::byte>& buffer);
1528 void set_raw_socket_option(
int32 socket_option_level,
int32 socket_option_name,
intptr option_value,
size_t option_value_size);
1554 std::shared_ptr<xtd::iasync_result> begin_connect_(std::shared_ptr<xtd::net::end_point> remote_end_point,
xtd::async_callback callback,
const std::any& state);
1555 void bind_(std::shared_ptr<xtd::net::end_point> local_end_point);
1556 void connect_(std::shared_ptr<xtd::net::end_point> remote_end_point);
1558 std::shared_ptr<data> data_;
Implements the Berkeley sockets interface.
Definition: socket.h:71
protocol_type
Specifies the protocols that the xtd::net::sockets::socket class supports.
Definition: protocol_type.h:28
Contains xtd::net::sockets::socket_option_name enum.
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.h:29
Provides an Internet Protocol (IP) address.
Definition: ip_address.h:35
Contains xtd::net::sockets::multicast_option class.
Contains xtd::net::sockets::io_control_code enum.
intmax_t intptr
Represent a pointer or a handle.
Definition: types.h:151
Gets the error status and clear.
io_control_code
Specifies the IO control codes supported by the xtd::net::sockets::socket::io_control method...
Definition: io_control_code.h:28
delegate< void(async_result ar)> async_callback
References a method to be called when a corresponding asynchronous operation completes.
Definition: delegate.h:34
Specifies whether a xtd::net::sockets::socket will remain connected after a call to the xtd::net::soc...
Definition: linger_option.h:32
Represents the status of an asynchronous operation.
Definition: iasync_result.h:22
An IP multicast loopback.
Use no flags for this call.
Receive a time-out. This option applies only to synchronous methods; it has no effect on asynchronous...
std::shared_ptr< xtd::iasync_result > begin_connect(const end_point_t &remote_end_point, xtd::async_callback callback, const std::any &state)
Begins an asynchronous request for a remote host connection.
Definition: socket.h:574
socket_option_name
Defines configuration option names.
Definition: socket_option_name.h:29
A request to send or receive data was disallowed because the socket is closed.
Contains xtd::net::sockets::socket_flags enum.
Identifies a network address. This is an abstract class.
Definition: end_point.h:25
Contains xtd::net::sockets::ip_v6_multicast_option class.
The xtd namespace contains all fundamental classes to access Hardware, Os, System, and more.
Definition: system_report.h:17
std::shared_ptr< xtd::iasync_result > async_result
Represents the status of an asynchronous operation.
Definition: async_result.h:16
Contains xtd::net::sockets::socket_type enum.
A socket receive_message_from operation.
Contains xtd::net::sockets::select_mode enum.
Enables a socket to be bound for exclusive access.
uint_least16_t uint16
Represents a 16-bit unsigned integer.
Definition: types.h:228
Represents text as a sequence of UTF-8 code units.
Definition: ustring.h:46
Contains IPAddress values used to join and drop multicast groups.
Definition: multicast_option.h:37
A socket accept operation.
socket_error
Defines error codes for the xtd::net::sockets::socket class.
Definition: socket_error.h:28
Send a time-out. This option applies only to synchronous methods; it has no effect on asynchronous me...
void bind(const end_point_t &local_end_point)
Associates a xtd::net::sockets::socket with a local endpoint.
Definition: socket.h:791
select_mode
Defines the polling modes for the xtd::net::sockets::socket::poll method.
Definition: select_mode.h:29
Do not fragment IP datagrams.
Defines a generalized method that a value type or class implements to create a type-specific method f...
Definition: iequatable.h:18
A socket connect operation.
Contains xtd::net::sockets::socket_shutdown enum.
The protocol type is incorrect.
Socket options apply to all sockets.
Contains xtd::net::sockets::socket_error enum.
socket_flags
Specifies socket send and receive behaviors. This enumeration has a flags attribute that allows a bit...
Definition: socket_flags.h:28
Indicates that all styles except allow_binary_specifier, allow_octal_specifier and allow_hex_specifie...
Contains xtd::net::sockets::ip_protection_level enum.
Disables the Nagle algorithm for send coalescing.
A socket receive operation.
Supports all classes in the xtd class hierarchy and provides low-level services to derived classes...
Definition: object.h:32
int_least32_t int32
Represents a 32-bit signed integer.
Definition: types.h:129
Contains xtd::net::sockets::address_family enum.
A socket receive_from operation.
socket_shutdown
Defines constants that are used by the xtd::net::sockets::socket::shutdown method.
Definition: socket_shutdown.h:29
socket_type
Specifies the type of socket that an instance of the xtd::net::sockets::socket class represents...
Definition: socket_type.h:30
Contains option values for joining an IPv6 multicast group.
Definition: ip_v6_multicast_option.h: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.h:29
A socket send_to operation.
A socket disconnect operation.
Contains xtd::net::sockets::linger_option class.
void connect(const end_point_t &remote_end_point)
Establishes a connection to a remote host.
Definition: socket.h:812
The socket handle may be reused when the request completes. This flag is valid only if xtd::net::sock...
uint_least8_t byte
Represents a 8-bit unsigned integer.
Definition: types.h:39
Represents an asynchronous socket operation.
Definition: socket_async_event_args.h:52
Contains xtd::net::sockets::socket_option_level enum.
size_t size
Represents a size of any object in bytes.
Definition: types.h:195
Contains xtd::net::sockets::protocol_type enum.
address_family
Specifies the addressing scheme that an instance of the xtd::net::sockets::socket class can use...
Definition: address_family.h:28
Represents a thread synchronization event that, when signaled, must be reset manually. This class cannot be inherited.
Definition: manual_reset_event.h:33
Encapsulates operating system specific objects that wait for exclusive access to shared resources...
Definition: wait_handle.h:48