authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2024-02-28 03:42:10+01:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2024-02-28 04:09:14+01:00
log17d0bb5bea1bd6c885759604d564a82e8ab36231
tree96261f3a712bf0eedd682b17233e5952f37423ac
parentae7f3fc360ce2f72611b5ef6abc6f21d31f82870

posix: fix socket fd leaks


1 files changed, 5 insertions(+), 0 deletions(-)

lib/std/os.zig+5
...@@ -3697,6 +3697,7 @@ pub fn socket(domain: u32, socket_type: u32, protocol: u32) SocketError!socket_t...@@ -3697,6 +3697,7 @@ pub fn socket(domain: u32, socket_type: u32, protocol: u32) SocketError!socket_t
3697 switch (errno(rc)) {3697 switch (errno(rc)) {
3698 .SUCCESS => {3698 .SUCCESS => {
3699 const fd = @as(fd_t, @intCast(rc));3699 const fd = @as(fd_t, @intCast(rc));
3700 errdefer close(fd);
3700 if (!have_sock_flags) {3701 if (!have_sock_flags) {
3701 try setSockFlags(fd, socket_type);3702 try setSockFlags(fd, socket_type);
3702 }3703 }
...@@ -4035,6 +4036,10 @@ pub fn accept(...@@ -4035,6 +4036,10 @@ pub fn accept(
4035 }4036 }
4036 };4037 };
40374038
4039 errdefer switch (builtin.os.tag) {
4040 .windows => windows.closesocket(accepted_sock) catch unreachable,
4041 else => close(accepted_sock),
4042 };
4038 if (!have_accept4) {4043 if (!have_accept4) {
4039 try setSockFlags(accepted_sock, flags);4044 try setSockFlags(accepted_sock, flags);
4040 }4045 }