UDPSocket.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435
  1. /*
  2. * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <Kernel/API/KResult.h>
  8. #include <Kernel/Locking/MutexProtected.h>
  9. #include <Kernel/Net/IPv4Socket.h>
  10. namespace Kernel {
  11. class UDPSocket final : public IPv4Socket {
  12. public:
  13. static KResultOr<NonnullRefPtr<UDPSocket>> try_create(int protocol, NonnullOwnPtr<DoubleBuffer> receive_buffer);
  14. virtual ~UDPSocket() override;
  15. static SocketHandle<UDPSocket> from_port(u16);
  16. static void for_each(Function<void(const UDPSocket&)>);
  17. private:
  18. explicit UDPSocket(int protocol, NonnullOwnPtr<DoubleBuffer> receive_buffer);
  19. virtual StringView class_name() const override { return "UDPSocket"; }
  20. static MutexProtected<HashMap<u16, UDPSocket*>>& sockets_by_port();
  21. virtual KResultOr<size_t> protocol_receive(ReadonlyBytes raw_ipv4_packet, UserOrKernelBuffer& buffer, size_t buffer_size, int flags) override;
  22. virtual KResultOr<size_t> protocol_send(const UserOrKernelBuffer&, size_t) override;
  23. virtual KResult protocol_connect(FileDescription&, ShouldBlock) override;
  24. virtual KResultOr<u16> protocol_allocate_local_port() override;
  25. virtual KResult protocol_bind() override;
  26. };
  27. }