File tree Expand file tree Collapse file tree 10 files changed +34
-23
lines changed Expand file tree Collapse file tree 10 files changed +34
-23
lines changed Original file line number Diff line number Diff line change @@ -46,14 +46,13 @@ abstract class Crystal::EventLoop
4646    #  file descriptor.
4747    abstract  def  reopened (file_descriptor : Crystal ::System ::FileDescriptor ) : Nil 
4848
49-     #  Hook to react on  the file descriptor  after the IO object has been marked 
50-     #  closed but before calling `#close` to actually close the system fd or 
51-     #  handle.
49+     #  Internal shutdown of  the file descriptor. Called  after the
50+     #  IO::FileDescriptor has been marked  closed but before calling `#close` to
51+     #  actually close the system fd or  handle.
5252    # 
53-     #  On UNIX targets the event loop must resume pending waiters and let them
54-     #  fail because the IO object is closed.
55-     def  before_close (file_descriptor : Crystal ::System ::FileDescriptor ) : Nil 
56-     end 
53+     #  Implementations shall resume all pending waiters and let them fail because
54+     #  the IO has been closed.
55+     abstract  def  shutdown (file_descriptor : Crystal ::System ::FileDescriptor ) : Nil 
5756
5857    #  Closes the system fd or handle.
5958    abstract  def  close (file_descriptor : Crystal ::System ::FileDescriptor ) : Nil 
Original file line number Diff line number Diff line change @@ -307,6 +307,9 @@ class Crystal::EventLoop::IOCP < Crystal::EventLoop
307307    raise  NotImplementedError .new(" Crystal::System::IOCP#reopened(FileDescriptor)"  )
308308  end 
309309
310+   def  shutdown (file_descriptor : Crystal ::System ::FileDescriptor ) : Nil 
311+   end 
312+ 
310313  def  close (file_descriptor : Crystal ::System ::FileDescriptor ) : Nil 
311314    LibC .CancelIoEx (file_descriptor.windows_handle, nil ) unless  file_descriptor.system_blocking?
312315    file_descriptor.file_descriptor_close
@@ -445,6 +448,9 @@ class Crystal::EventLoop::IOCP < Crystal::EventLoop
445448    end 
446449  end 
447450
451+   def  shutdown (socket : ::Socket ) : Nil 
452+   end 
453+ 
448454  def  close (socket : ::Socket ) : Nil 
449455    raise  NotImplementedError .new(" Crystal::System::IOCP#close(Socket)"  )
450456  end 
Original file line number Diff line number Diff line change @@ -178,7 +178,7 @@ class Crystal::EventLoop::LibEvent < Crystal::EventLoop
178178    file_descriptor.evented_close
179179  end 
180180
181-   def  before_close (file_descriptor : Crystal ::System ::FileDescriptor ) : Nil 
181+   def  shutdown (file_descriptor : Crystal ::System ::FileDescriptor ) : Nil 
182182    #  perform cleanup before LibC.close. Using a file descriptor after it has
183183    #  been closed is never defined and can always lead to undefined results
184184    file_descriptor.evented_close
@@ -302,7 +302,7 @@ class Crystal::EventLoop::LibEvent < Crystal::EventLoop
302302    end 
303303  end 
304304
305-   def  before_close (socket : ::Socket ) : Nil 
305+   def  shutdown (socket : ::Socket ) : Nil 
306306    #  perform cleanup before LibC.close. Using a file descriptor after it has
307307    #  been closed is never defined and can always lead to undefined results
308308    socket.evented_close
Original file line number Diff line number Diff line change @@ -232,7 +232,7 @@ abstract class Crystal::EventLoop::Polling < Crystal::EventLoop
232232    resume_all(file_descriptor)
233233  end 
234234
235-   def  before_close (file_descriptor : System ::FileDescriptor ) : Nil 
235+   def  shutdown (file_descriptor : System ::FileDescriptor ) : Nil 
236236    #  perform cleanup before LibC.close. Using a file descriptor after it has
237237    #  been closed is never defined and can always lead to undefined results
238238    resume_all(file_descriptor)
@@ -366,7 +366,7 @@ abstract class Crystal::EventLoop::Polling < Crystal::EventLoop
366366    end 
367367  end 
368368
369-   def  before_close (socket : ::Socket ) : Nil 
369+   def  shutdown (socket : ::Socket ) : Nil 
370370    #  perform cleanup before LibC.close. Using a file descriptor after it has
371371    #  been closed is never defined and can always lead to undefined results
372372    resume_all(socket)
Original file line number Diff line number Diff line change @@ -74,13 +74,13 @@ abstract class Crystal::EventLoop
7474    #  and the source address.
7575    abstract  def  receive_from (socket : ::Socket , slice : Bytes ) : Tuple (Int32 , ::Socket ::Address )
7676
77-     #  Hook to react on the socket after the IO object has been marked closed but
78-     #  before calling `#close` to actually close the system socket fd or handle.
77+     #  Internal shutdown of the socket. Called after the Socket has been marked
78+     #  closed but before calling `#close` to actually close the system socket fd
79+     #  or handle.
7980    # 
80-     #  On UNIX targets the event loop must resume pending waiters and let them
81-     #  fail because the IO object is closed.
82-     def  before_close (socket : ::Socket ) : Nil 
83-     end 
81+     #  Implementations shall resume all pending waiters and let them fail because
82+     #  the IO has been closed. They don't have to call the `shutdown` syscall.
83+     abstract  def  shutdown (socket : ::Socket ) : Nil 
8484
8585    #  Closes the system socket fd or handle.
8686    abstract  def  close (socket : ::Socket ) : Nil 
Original file line number Diff line number Diff line change @@ -80,10 +80,13 @@ class Crystal::EventLoop::Wasi < Crystal::EventLoop
8080    raise  NotImplementedError .new(" Crystal::EventLoop#reopened(FileDescriptor)"  )
8181  end 
8282
83-   def  before_close (file_descriptor : Crystal ::System ::FileDescriptor ) : Nil 
83+   def  shutdown (file_descriptor : Crystal ::System ::FileDescriptor ) : Nil 
8484    file_descriptor.evented_close
8585  end 
8686
87+   def  shutdown (file_descriptor : Crystal ::System ::FileDescriptor ) : Nil 
88+   end 
89+ 
8790  def  close (file_descriptor : Crystal ::System ::FileDescriptor ) : Nil 
8891    file_descriptor.file_descriptor_close
8992  end 
@@ -136,10 +139,13 @@ class Crystal::EventLoop::Wasi < Crystal::EventLoop
136139    raise  NotImplementedError .new " Crystal::Wasi::EventLoop#accept" 
137140  end 
138141
139-   def  before_close (socket : ::Socket ) : Nil 
142+   def  shutdown (socket : ::Socket ) : Nil 
140143    socket.evented_close
141144  end 
142145
146+   def  shutdown (socket : ::Socket ) : Nil 
147+   end 
148+ 
143149  def  close (socket : ::Socket ) : Nil 
144150    socket.socket_close
145151  end 
Original file line number Diff line number Diff line change @@ -134,7 +134,7 @@ module Crystal::System::FileDescriptor
134134  end 
135135
136136  private  def  system_close 
137-     event_loop.before_close (self )
137+     event_loop.shutdown (self )
138138    event_loop.close(self )
139139  end 
140140
Original file line number Diff line number Diff line change @@ -224,7 +224,7 @@ module Crystal::System::Socket
224224  end 
225225
226226  private  def  system_close 
227-     event_loop.before_close (self )
227+     event_loop.shutdown (self )
228228    event_loop.close(self )
229229  end 
230230
Original file line number Diff line number Diff line change @@ -152,7 +152,7 @@ module Crystal::System::Socket
152152  end 
153153
154154  private  def  system_close 
155-     event_loop.before_close (self )
155+     event_loop.shutdown (self )
156156    event_loop.close(self )
157157  end 
158158
Original file line number Diff line number Diff line change @@ -216,7 +216,7 @@ module Crystal::System::FileDescriptor
216216  end 
217217
218218  private  def  system_close 
219-     event_loop.before_close (self )
219+     event_loop.shutdown (self )
220220    event_loop.close(self )
221221  end 
222222
    
 
   
 
     
   
   
          
     
  
    
     
 
    
      
     
 
     
    You can’t perform that action at this time.
  
 
    
  
     
    
      
        
     
 
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments