Kernel: Fix how socket closing works

Sockets are now closed only when they are not referenced any more. This
allows child process to close socket and still keep it open for the
parent.
This commit is contained in:
2024-06-19 10:39:44 +03:00
parent d5daa46ab8
commit bce16cdd6e
9 changed files with 50 additions and 55 deletions

View File

@@ -86,8 +86,6 @@ namespace Kernel
virtual bool is_pipe() const { return false; }
virtual bool is_tty() const { return false; }
void on_close();
// Directory API
BAN::ErrorOr<BAN::RefPtr<Inode>> find_inode(BAN::StringView);
BAN::ErrorOr<size_t> list_next_inodes(off_t, struct dirent* list, size_t list_size);
@@ -122,8 +120,6 @@ namespace Kernel
BAN::ErrorOr<long> ioctl(int request, void* arg);
protected:
virtual void on_close_impl() {}
// Directory API
virtual BAN::ErrorOr<BAN::RefPtr<Inode>> find_inode_impl(BAN::StringView) { return BAN::Error::from_errno(ENOTSUP); }
virtual BAN::ErrorOr<size_t> list_next_inodes_impl(off_t, struct dirent*, size_t) { return BAN::Error::from_errno(ENOTSUP); }

View File

@@ -49,8 +49,6 @@ namespace Kernel
virtual void add_protocol_header(BAN::ByteSpan packet, uint16_t dst_port, PseudoHeader) override;
protected:
virtual void on_close_impl() override;
virtual BAN::ErrorOr<void> connect_impl(const sockaddr*, socklen_t) override;
virtual void receive_packet(BAN::ConstByteSpan, const sockaddr_storage& sender) override;
@@ -111,6 +109,7 @@ namespace Kernel
TCPSocket(NetworkLayer&, ino_t, const TmpInodeInfo&);
void process_task();
void start_close_sequence();
void set_connection_as_closed();
private:

View File

@@ -33,8 +33,6 @@ namespace Kernel
protected:
virtual void receive_packet(BAN::ConstByteSpan, const sockaddr_storage& sender) override;
virtual void on_close_impl() override;
virtual BAN::ErrorOr<void> bind_impl(const sockaddr* address, socklen_t address_len) override;
virtual BAN::ErrorOr<size_t> sendto_impl(BAN::ConstByteSpan message, const sockaddr* address, socklen_t address_len) override;
virtual BAN::ErrorOr<size_t> recvfrom_impl(BAN::ByteSpan buffer, sockaddr* address, socklen_t* address_len) override;
@@ -45,6 +43,7 @@ namespace Kernel
private:
UDPSocket(NetworkLayer&, ino_t, const TmpInodeInfo&);
~UDPSocket();
struct PacketInfo
{

View File

@@ -18,8 +18,6 @@ namespace Kernel
static BAN::ErrorOr<BAN::RefPtr<UnixDomainSocket>> create(SocketType, ino_t, const TmpInodeInfo&);
protected:
virtual void on_close_impl() override;
virtual BAN::ErrorOr<long> accept_impl(sockaddr*, socklen_t*) override;
virtual BAN::ErrorOr<void> connect_impl(const sockaddr*, socklen_t) override;
virtual BAN::ErrorOr<void> listen_impl(int) override;
@@ -33,7 +31,7 @@ namespace Kernel
private:
UnixDomainSocket(SocketType, ino_t, const TmpInodeInfo&);
~UnixDomainSocket() { on_close_impl(); }
~UnixDomainSocket();
BAN::ErrorOr<void> add_packet(BAN::ConstByteSpan);