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 =
6060  Unix. set_nonblock sock_unix;
6161  Fd. of_unix ~sw  ~blocking: false  ~close_unix: true  sock_unix
6262
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  = 
6470  try 
65-     Fd. use_exn " connect" fun  fd  -> Unix. connect fd addr)
71+     Fd. use_exn " connect" @@  fun  fd  ->
72+     try_bind fd bind ;
73+     Unix. connect fd addr
6674  with 
6775  |  Unix. Unix_error  ((EINTR  | EAGAIN  | EWOULDBLOCK  | EINPROGRESS ), _ , _ ) ->
6876    await_writable fd;
6977    match  Fd. use_exn " connect" Unix. getsockopt_error with 
7078    |  None  -> () 
7179    |  Some  code  -> raise (Err. wrap code " connect-in-progress" " " 
80+   |  Unix. Unix_error  (code , name , arg ) -> raise (Err. wrap code name arg)
7281
7382let  accept  ~sw   sock  = 
7483  Fd. use_exn " accept" @@  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.
142142    );
143143  (listening_socket ~hook  sock :>  _ Eio.Net. listening_socket_ty r)
144144
145- let  connect  ~sw   connect_addr  = 
145+ let  connect  ~sw   ? bind   connect_addr  = 
146146  let  socket_type, addr = 
147147    match  connect_addr with 
148148    |  `Unix  path          -> Unix. SOCK_STREAM , Unix. ADDR_UNIX  path
@@ -151,8 +151,9 @@ let connect ~sw connect_addr =
151151      Unix. SOCK_STREAM , Unix. ADDR_INET  (host, port)
152152  in 
153153  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 
154155  try 
155-     Low_level. connect sock addr;
156+     Low_level. connect sock ?bind  addr;
156157    (Flow. of_fd sock :> _ Eio_unix.Net.stream_socket )
157158  with  Unix. Unix_error  (code , name , arg ) ->  raise (Err. wrap code name arg)
158159
 
 
   
 
     
   
   
          
    
    
     
    
      
     
     
    You can’t perform that action at this time.
  
 
    
  
    
      
        
     
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments