diff options
author | 2022-01-25 00:00:16 -0800 | |
---|---|---|
committer | 2022-01-25 00:00:16 -0800 | |
commit | 25c35e59b4054dfef5d971d0690cc085d6956647 (patch) | |
tree | a61bf25a9b68d9c12b89a88e10f148ec632aab23 /src/io/io_linux.zig | |
parent | ff7785e0237df00bba0946dc759bbfac6b561c5b (diff) | |
download | bun-25c35e59b4054dfef5d971d0690cc085d6956647.tar.gz bun-25c35e59b4054dfef5d971d0690cc085d6956647.tar.zst bun-25c35e59b4054dfef5d971d0690cc085d6956647.zip |
Fix getsockopt()
Diffstat (limited to 'src/io/io_linux.zig')
-rw-r--r-- | src/io/io_linux.zig | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/io/io_linux.zig b/src/io/io_linux.zig index dba0ab7c5..ed2c3936b 100644 --- a/src/io/io_linux.zig +++ b/src/io/io_linux.zig @@ -675,7 +675,7 @@ pub const Completion = struct { linux.io_uring_prep_poll_add(sqe, op.fd, linux.POLL.HUP | linux.POLL.IN | linux.POLL.OUT); }, .connect_poll => |*op| { - linux.io_uring_prep_poll_add(sqe, op.socket, linux.POLL.HUP | linux.POLL.OUT); + linux.io_uring_prep_poll_add(sqe, op.socket, linux.POLL.HUP | linux.POLL.OUT | linux.POLL.IN); }, .fsync => |op| { linux.io_uring_prep_fsync(sqe, op.fd, 0); @@ -769,11 +769,14 @@ pub const Completion = struct { }, .connect_poll => { var op = &completion.operation.connect_poll; - const rc = linux.connect(op.socket, &op.address.any, op.address.getOsSockLen()); + var err_code: i32 = undefined; + var size: u32 = @sizeOf(u32); + const rc = linux.getsockopt(op.socket, os.SOL.SOCKET, os.SO.ERROR, @ptrCast([*]u8, &err_code), &size); completion.result = @intCast(i32, rc); const result = if (completion.result < 0) switch (-completion.result) { os.EAGAIN, os.EWOULDBLOCK, os.EINPROGRESS, os.EINTR => { + _ = linux.connect(op.socket, &op.address.any, op.address.getOsSockLen()); completion.io.enqueue(completion); return; }, |