/* * Copyright (c) 2020, Andreas Kling * Copyright (c) 2022, Alexander Narsudinov * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include namespace Core { class UDPServer : public Object { C_OBJECT(UDPServer) public: virtual ~UDPServer() override; bool is_bound() const { return m_bound; } bool bind(IPv4Address const& address, u16 port); ErrorOr receive(size_t size, sockaddr_in& from); ErrorOr receive(size_t size) { struct sockaddr_in saddr; return receive(size, saddr); }; ErrorOr send(ReadonlyBytes, sockaddr_in const& to); Optional local_address() const; Optional local_port() const; int fd() const { return m_fd; } Function on_ready_to_receive; protected: explicit UDPServer(Object* parent = nullptr); private: int m_fd { -1 }; bool m_bound { false }; RefPtr m_notifier; }; }