File tree Expand file tree Collapse file tree 2 files changed +14
-4
lines changed Expand file tree Collapse file tree 2 files changed +14
-4
lines changed Original file line number Diff line number Diff line change @@ -60,15 +60,24 @@ let socket ~sw socket_domain socket_type protocol =
60
60
Unix. set_nonblock sock_unix;
61
61
Fd. of_unix ~sw ~blocking: false ~close_unix: true sock_unix
62
62
63
- let connect fd addr =
63
+ let try_bind fd = function
64
+ | None -> ()
65
+ | Some bind_addr ->
66
+ try Unix. bind fd bind_addr
67
+ with Unix. Unix_error (code , name , arg ) -> raise @@ Err. wrap_fs code name arg
68
+
69
+ let connect fd ?bind addr =
64
70
try
65
- Fd. use_exn " connect" fd (fun fd -> Unix. connect fd addr)
71
+ Fd. use_exn " connect" fd @@ fun fd ->
72
+ try_bind fd bind ;
73
+ Unix. connect fd addr
66
74
with
67
75
| Unix. Unix_error ((EINTR | EAGAIN | EWOULDBLOCK | EINPROGRESS ), _ , _ ) ->
68
76
await_writable fd;
69
77
match Fd. use_exn " connect" fd Unix. getsockopt_error with
70
78
| None -> ()
71
79
| Some code -> raise (Err. wrap code " connect-in-progress" " " )
80
+ | Unix. Unix_error (code , name , arg ) -> raise (Err. wrap code name arg)
72
81
73
82
let accept ~sw sock =
74
83
Fd. use_exn " accept" sock @@ fun sock ->
Original file line number Diff line number Diff line change @@ -142,7 +142,7 @@ let listen ~reuse_addr ~reuse_port ~backlog ~sw (listen_addr : Eio.Net.Sockaddr.
142
142
);
143
143
(listening_socket ~hook sock :> _ Eio.Net. listening_socket_ty r)
144
144
145
- let connect ~sw connect_addr =
145
+ let connect ~sw ? bind connect_addr =
146
146
let socket_type, addr =
147
147
match connect_addr with
148
148
| `Unix path -> Unix. SOCK_STREAM , Unix. ADDR_UNIX path
@@ -151,8 +151,9 @@ let connect ~sw connect_addr =
151
151
Unix. SOCK_STREAM , Unix. ADDR_INET (host, port)
152
152
in
153
153
let sock = Low_level. socket ~sw (socket_domain_of connect_addr) socket_type 0 in
154
+ let bind = Option. map Eio_unix.Net. sockaddr_to_unix bind in
154
155
try
155
- Low_level. connect sock addr;
156
+ Low_level. connect sock ?bind addr;
156
157
(Flow. of_fd sock :> _ Eio_unix.Net.stream_socket )
157
158
with Unix. Unix_error (code , name , arg ) -> raise (Err. wrap code name arg)
158
159
You can’t perform that action at this time.
0 commit comments