12#ifndef ROC_NETIO_UDP_SENDER_PORT_H_
13#define ROC_NETIO_UDP_SENDER_PORT_H_
57 uv_loop_t& event_loop,
82 static void close_cb_(uv_handle_t* handle);
83 static void write_sem_cb_(uv_async_t* handle);
84 static void send_cb_(uv_udp_send_t* req,
int status);
88 bool fully_closed_()
const;
89 void start_closing_();
97 void* close_handler_arg_;
101 uv_async_t write_sem_;
102 bool write_sem_initialized_;
105 bool handle_initialized_;
Atomic integer. Provides sequential consistency. For a fine-grained memory order control,...
Memory allocator interface.
Thread-safe lock-free node-based intrusive multi-producer single-consumer queue.
IAllocator & allocator() const
Get allocator.
const address::SocketAddr & bind_address() const
Get bind address.
virtual AsyncOperationStatus async_close(ICloseHandler &handler, void *handler_arg)
Asynchronously close sender.
virtual bool open()
Open sender.
virtual void write(const packet::PacketPtr &)
Write packet.
UdpSenderPort(const UdpSenderConfig &config, uv_loop_t &event_loop, core::IAllocator &allocator)
Initialize.
virtual void format_descriptor(core::StringBuilder &b)
Format descriptor.
Memory allocator interface.
Multi-producer single-consumer queue.
AsyncOperationStatus
Asynchronous operation status.
bool non_blocking_enabled
If true, allow non-blocking writes directly in write() method. If non-blocking write can't be perform...
address::SocketAddr bind_address
Sender will bind to this address. If IP is zero, INADDR_ANY is used, i.e. the socket is bound to all ...
bool operator==(const UdpSenderConfig &other) const
Check two configs for equality.