diff options
Diffstat (limited to 'Libraries')
-rw-r--r-- | Libraries/LibCore/CSocket.cpp | 13 | ||||
-rw-r--r-- | Libraries/LibCore/CSocket.h | 4 |
2 files changed, 17 insertions, 0 deletions
diff --git a/Libraries/LibCore/CSocket.cpp b/Libraries/LibCore/CSocket.cpp index c49a6e2698..636dc179d5 100644 --- a/Libraries/LibCore/CSocket.cpp +++ b/Libraries/LibCore/CSocket.cpp @@ -137,3 +137,16 @@ bool CSocket::listen() set_error(errno); return rc == 0; } + +void CSocket::did_update_fd(int fd) +{ + if (fd < 0) { + m_read_notifier = nullptr; + return; + } + m_read_notifier = make<CNotifier>(fd, CNotifier::Event::Read); + m_read_notifier->on_ready_to_read = [this] { + if (on_ready_to_read) + on_ready_to_read(); + }; +} diff --git a/Libraries/LibCore/CSocket.h b/Libraries/LibCore/CSocket.h index 20d059166b..7aac4008f9 100644 --- a/Libraries/LibCore/CSocket.h +++ b/Libraries/LibCore/CSocket.h @@ -39,6 +39,7 @@ public: int destination_port() const { return m_destination_port; } Function<void()> on_connected; + Function<void()> on_ready_to_read; protected: CSocket(Type, CObject* parent); @@ -49,8 +50,11 @@ protected: int m_destination_port { -1 }; bool m_connected { false }; + virtual void did_update_fd(int) override; + private: virtual bool open(CIODevice::OpenMode) override { ASSERT_NOT_REACHED(); } Type m_type { Type::Invalid }; OwnPtr<CNotifier> m_notifier; + OwnPtr<CNotifier> m_read_notifier; }; |