| ... | ... | @@ -1990,53 +1990,15 @@ test "accept/connect/send/recv" { |
| 1990 | 1990 | }; |
| 1991 | 1991 | defer ring.deinit(); |
| 1992 | 1992 | |
| 1993 | | const address = try net.Address.parseIp4("127.0.0.1", 3131); |
| 1994 | | const kernel_backlog = 1; |
| 1995 | | const server = try os.socket(address.any.family, os.SOCK.STREAM | os.SOCK.CLOEXEC, 0); |
| 1996 | | defer os.close(server); |
| 1997 | | try os.setsockopt(server, os.SOL.SOCKET, os.SO.REUSEADDR, &mem.toBytes(@as(c_int, 1))); |
| 1998 | | try os.bind(server, &address.any, address.getOsSockLen()); |
| 1999 | | try os.listen(server, kernel_backlog); |
| 1993 | const socket_test_harness = try createSocketTestHarness(&ring); |
| 1994 | defer socket_test_harness.close(); |
| 2000 | 1995 | |
| 2001 | 1996 | const buffer_send = [_]u8{ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 }; |
| 2002 | 1997 | var buffer_recv = [_]u8{ 0, 1, 0, 1, 0 }; |
| 2003 | 1998 | |
| 2004 | | var accept_addr: os.sockaddr = undefined; |
| 2005 | | var accept_addr_len: os.socklen_t = @sizeOf(@TypeOf(accept_addr)); |
| 2006 | | _ = try ring.accept(0xaaaaaaaa, server, &accept_addr, &accept_addr_len, 0); |
| 2007 | | try testing.expectEqual(@as(u32, 1), try ring.submit()); |
| 2008 | | |
| 2009 | | const client = try os.socket(address.any.family, os.SOCK.STREAM | os.SOCK.CLOEXEC, 0); |
| 2010 | | defer os.close(client); |
| 2011 | | _ = try ring.connect(0xcccccccc, client, &address.any, address.getOsSockLen()); |
| 2012 | | try testing.expectEqual(@as(u32, 1), try ring.submit()); |
| 2013 | | |
| 2014 | | var cqe_accept = try ring.copy_cqe(); |
| 2015 | | if (cqe_accept.err() == .INVAL) return error.SkipZigTest; |
| 2016 | | var cqe_connect = try ring.copy_cqe(); |
| 2017 | | if (cqe_connect.err() == .INVAL) return error.SkipZigTest; |
| 2018 | | |
| 2019 | | // The accept/connect CQEs may arrive in any order, the connect CQE will sometimes come first: |
| 2020 | | if (cqe_accept.user_data == 0xcccccccc and cqe_connect.user_data == 0xaaaaaaaa) { |
| 2021 | | const a = cqe_accept; |
| 2022 | | const b = cqe_connect; |
| 2023 | | cqe_accept = b; |
| 2024 | | cqe_connect = a; |
| 2025 | | } |
| 2026 | | |
| 2027 | | try testing.expectEqual(@as(u64, 0xaaaaaaaa), cqe_accept.user_data); |
| 2028 | | if (cqe_accept.res <= 0) std.debug.print("\ncqe_accept.res={}\n", .{cqe_accept.res}); |
| 2029 | | try testing.expect(cqe_accept.res > 0); |
| 2030 | | try testing.expectEqual(@as(u32, 0), cqe_accept.flags); |
| 2031 | | try testing.expectEqual(linux.io_uring_cqe{ |
| 2032 | | .user_data = 0xcccccccc, |
| 2033 | | .res = 0, |
| 2034 | | .flags = 0, |
| 2035 | | }, cqe_connect); |
| 2036 | | |
| 2037 | | const send = try ring.send(0xeeeeeeee, client, buffer_send[0..], 0); |
| 1999 | const send = try ring.send(0xeeeeeeee, socket_test_harness.client, buffer_send[0..], 0); |
| 2038 | 2000 | send.flags |= linux.IOSQE_IO_LINK; |
| 2039 | | _ = try ring.recv(0xffffffff, cqe_accept.res, .{ .buffer = buffer_recv[0..] }, 0); |
| 2001 | _ = try ring.recv(0xffffffff, socket_test_harness.server, .{ .buffer = buffer_recv[0..] }, 0); |
| 2040 | 2002 | try testing.expectEqual(@as(u32, 2), try ring.submit()); |
| 2041 | 2003 | |
| 2042 | 2004 | const cqe_send = try ring.copy_cqe(); |
| ... | ... | @@ -2261,50 +2223,12 @@ test "accept/connect/recv/link_timeout" { |
| 2261 | 2223 | }; |
| 2262 | 2224 | defer ring.deinit(); |
| 2263 | 2225 | |
| 2264 | | const address = try net.Address.parseIp4("127.0.0.1", 3131); |
| 2265 | | const kernel_backlog = 1; |
| 2266 | | const server = try os.socket(address.any.family, os.SOCK.STREAM | os.SOCK.CLOEXEC, 0); |
| 2267 | | defer os.close(server); |
| 2268 | | try os.setsockopt(server, os.SOL.SOCKET, os.SO.REUSEADDR, &mem.toBytes(@as(c_int, 1))); |
| 2269 | | try os.bind(server, &address.any, address.getOsSockLen()); |
| 2270 | | try os.listen(server, kernel_backlog); |
| 2226 | const socket_test_harness = try createSocketTestHarness(&ring); |
| 2227 | defer socket_test_harness.close(); |
| 2271 | 2228 | |
| 2272 | 2229 | var buffer_recv = [_]u8{ 0, 1, 0, 1, 0 }; |
| 2273 | 2230 | |
| 2274 | | var accept_addr: os.sockaddr = undefined; |
| 2275 | | var accept_addr_len: os.socklen_t = @sizeOf(@TypeOf(accept_addr)); |
| 2276 | | _ = try ring.accept(0xaaaaaaaa, server, &accept_addr, &accept_addr_len, 0); |
| 2277 | | try testing.expectEqual(@as(u32, 1), try ring.submit()); |
| 2278 | | |
| 2279 | | const client = try os.socket(address.any.family, os.SOCK.STREAM | os.SOCK.CLOEXEC, 0); |
| 2280 | | defer os.close(client); |
| 2281 | | _ = try ring.connect(0xcccccccc, client, &address.any, address.getOsSockLen()); |
| 2282 | | try testing.expectEqual(@as(u32, 1), try ring.submit()); |
| 2283 | | |
| 2284 | | var cqe_accept = try ring.copy_cqe(); |
| 2285 | | if (cqe_accept.err() == .INVAL) return error.SkipZigTest; |
| 2286 | | var cqe_connect = try ring.copy_cqe(); |
| 2287 | | if (cqe_connect.err() == .INVAL) return error.SkipZigTest; |
| 2288 | | |
| 2289 | | // The accept/connect CQEs may arrive in any order, the connect CQE will sometimes come first: |
| 2290 | | if (cqe_accept.user_data == 0xcccccccc and cqe_connect.user_data == 0xaaaaaaaa) { |
| 2291 | | const a = cqe_accept; |
| 2292 | | const b = cqe_connect; |
| 2293 | | cqe_accept = b; |
| 2294 | | cqe_connect = a; |
| 2295 | | } |
| 2296 | | |
| 2297 | | try testing.expectEqual(@as(u64, 0xaaaaaaaa), cqe_accept.user_data); |
| 2298 | | if (cqe_accept.res <= 0) std.debug.print("\ncqe_accept.res={}\n", .{cqe_accept.res}); |
| 2299 | | try testing.expect(cqe_accept.res > 0); |
| 2300 | | try testing.expectEqual(@as(u32, 0), cqe_accept.flags); |
| 2301 | | try testing.expectEqual(linux.io_uring_cqe{ |
| 2302 | | .user_data = 0xcccccccc, |
| 2303 | | .res = 0, |
| 2304 | | .flags = 0, |
| 2305 | | }, cqe_connect); |
| 2306 | | |
| 2307 | | const sqe_recv = try ring.recv(0xffffffff, cqe_accept.res, .{ .buffer = buffer_recv[0..] }, 0); |
| 2231 | const sqe_recv = try ring.recv(0xffffffff, socket_test_harness.server, .{ .buffer = buffer_recv[0..] }, 0); |
| 2308 | 2232 | sqe_recv.flags |= linux.IOSQE_IO_LINK; |
| 2309 | 2233 | |
| 2310 | 2234 | const ts = os.linux.kernel_timespec{ .tv_sec = 0, .tv_nsec = 1000000 }; |
| ... | ... | @@ -2448,50 +2372,12 @@ test "accept/connect/recv/cancel" { |
| 2448 | 2372 | }; |
| 2449 | 2373 | defer ring.deinit(); |
| 2450 | 2374 | |
| 2451 | | const address = try net.Address.parseIp4("127.0.0.1", 3131); |
| 2452 | | const kernel_backlog = 1; |
| 2453 | | const server = try os.socket(address.any.family, os.SOCK.STREAM | os.SOCK.CLOEXEC, 0); |
| 2454 | | defer os.close(server); |
| 2455 | | try os.setsockopt(server, os.SOL.SOCKET, os.SO.REUSEADDR, &mem.toBytes(@as(c_int, 1))); |
| 2456 | | try os.bind(server, &address.any, address.getOsSockLen()); |
| 2457 | | try os.listen(server, kernel_backlog); |
| 2375 | const socket_test_harness = try createSocketTestHarness(&ring); |
| 2376 | defer socket_test_harness.close(); |
| 2458 | 2377 | |
| 2459 | 2378 | var buffer_recv = [_]u8{ 0, 1, 0, 1, 0 }; |
| 2460 | 2379 | |
| 2461 | | var accept_addr: os.sockaddr = undefined; |
| 2462 | | var accept_addr_len: os.socklen_t = @sizeOf(@TypeOf(accept_addr)); |
| 2463 | | _ = try ring.accept(0xaaaaaaaa, server, &accept_addr, &accept_addr_len, 0); |
| 2464 | | try testing.expectEqual(@as(u32, 1), try ring.submit()); |
| 2465 | | |
| 2466 | | const client = try os.socket(address.any.family, os.SOCK.STREAM | os.SOCK.CLOEXEC, 0); |
| 2467 | | defer os.close(client); |
| 2468 | | _ = try ring.connect(0xcccccccc, client, &address.any, address.getOsSockLen()); |
| 2469 | | try testing.expectEqual(@as(u32, 1), try ring.submit()); |
| 2470 | | |
| 2471 | | var cqe_accept = try ring.copy_cqe(); |
| 2472 | | if (cqe_accept.err() == .INVAL) return error.SkipZigTest; |
| 2473 | | var cqe_connect = try ring.copy_cqe(); |
| 2474 | | if (cqe_connect.err() == .INVAL) return error.SkipZigTest; |
| 2475 | | |
| 2476 | | // The accept/connect CQEs may arrive in any order, the connect CQE will sometimes come first: |
| 2477 | | if (cqe_accept.user_data == 0xcccccccc and cqe_connect.user_data == 0xaaaaaaaa) { |
| 2478 | | const a = cqe_accept; |
| 2479 | | const b = cqe_connect; |
| 2480 | | cqe_accept = b; |
| 2481 | | cqe_connect = a; |
| 2482 | | } |
| 2483 | | |
| 2484 | | try testing.expectEqual(@as(u64, 0xaaaaaaaa), cqe_accept.user_data); |
| 2485 | | if (cqe_accept.res <= 0) std.debug.print("\ncqe_accept.res={}\n", .{cqe_accept.res}); |
| 2486 | | try testing.expect(cqe_accept.res > 0); |
| 2487 | | try testing.expectEqual(@as(u32, 0), cqe_accept.flags); |
| 2488 | | try testing.expectEqual(linux.io_uring_cqe{ |
| 2489 | | .user_data = 0xcccccccc, |
| 2490 | | .res = 0, |
| 2491 | | .flags = 0, |
| 2492 | | }, cqe_connect); |
| 2493 | | |
| 2494 | | _ = try ring.recv(0xffffffff, cqe_accept.res, .{ .buffer = buffer_recv[0..] }, 0); |
| 2380 | _ = try ring.recv(0xffffffff, socket_test_harness.server, .{ .buffer = buffer_recv[0..] }, 0); |
| 2495 | 2381 | try testing.expectEqual(@as(u32, 1), try ring.submit()); |
| 2496 | 2382 | |
| 2497 | 2383 | const sqe_cancel = try ring.cancel(0x99999999, 0xffffffff, 0); |