|
5 | 5 |
|
6 | 6 | open Test_helpers
|
7 | 7 |
|
8 |
| -let test_fd = |
9 |
| - if Sys.win32 then |
10 |
| - Luv.Process.stderr |
11 |
| - else begin |
12 |
| - (* On Linux in Travis, trying to create a poll handle for STDERR results in |
13 |
| - EPERM, so we create a dummy pipe instead. We don't bother closing it: |
14 |
| - only one will be created on tester startup, and it will be closed by the |
15 |
| - system on process exit. *) |
16 |
| - let (_read_end, write_end) = Unix.pipe () in |
17 |
| - (Obj.magic write_end : int) |
| 8 | +let with_test_fd f = |
| 9 | + let address = fresh_address () in |
| 10 | + |
| 11 | + let server = Luv.TCP.init () |> check_success_result "server init" in |
| 12 | + let remote_client = |
| 13 | + Luv.TCP.init () |> check_success_result "remote client init" in |
| 14 | + Luv.TCP.bind server address |> check_success_result "bind"; |
| 15 | + Luv.Stream.listen server begin fun result -> |
| 16 | + check_success_result "listen" result; |
| 17 | + Luv.Stream.accept ~server ~client:remote_client |
| 18 | + |> check_success_result "accept" |
| 19 | + end; |
| 20 | + |
| 21 | + let client = Luv.TCP.init () |> check_success_result "client init" in |
| 22 | + Luv.TCP.connect client address begin fun result -> |
| 23 | + check_success_result "connect" result; |
| 24 | + let os_socket = Luv.Handle.fileno client |> check_success_result "fileno" in |
| 25 | + let os_socket : Luv.Os_fd.Socket.t = Obj.magic os_socket in |
| 26 | + f (os_socket); |
| 27 | + Luv.Handle.close client ignore; |
| 28 | + Luv.Handle.close remote_client ignore |
18 | 29 | end
|
19 | 30 |
|
20 | 31 | let with_poll f =
|
21 |
| - let poll = |
22 |
| - Luv.Poll.init test_fd |
23 |
| - |> check_success_result "init" |
24 |
| - in |
| 32 | + with_test_fd begin fun socket -> |
| 33 | + let poll = |
| 34 | + Luv.Poll.init_socket socket |
| 35 | + |> check_success_result "init_socket" |
| 36 | + in |
25 | 37 |
|
26 |
| - f poll; |
| 38 | + f poll; |
27 | 39 |
|
28 |
| - Luv.Handle.close poll ignore; |
29 |
| - run () |
| 40 | + Luv.Handle.close poll ignore; |
| 41 | + run () |
| 42 | + end |
30 | 43 |
|
31 | 44 | let tests = [
|
32 | 45 | "poll", [
|
|
0 commit comments