@@ -77,8 +77,8 @@ protocol MessageHandler {
7777
7878/// A connection to a network peer that speaks the above protocol.
7979class  Connection  { 
80-     /// File  descriptor of the socket.
81-     let  socket :  Int32 
80+     /// The file  descriptor on POSIX or SOCKET handle on Windows  of the socket.
81+     let  socket :  libsocket . socket_t 
8282
8383    // Whether this connection has been closed.
8484    private( set)   var  closed   =  false 
@@ -104,12 +104,16 @@ class Connection {
104104    /// Pending outgoing data. Must only be accessed on this connection's dispatch queue.
105105    private  var  sendQueue :  [ Data ]  =  [ ] 
106106
107-     init ( socket:  Int32 ,  handler:  MessageHandler )  { 
107+     init ( socket:  libsocket . socket_t ,  handler:  MessageHandler )  { 
108108        self . socket =  socket
109109        self . handler =  handler
110110        self . queue =  DispatchQueue ( label:  " Socket  \( socket) " ) 
111-         
111+ 
112+ #if os(Windows) 
113+         self . readSource =  DispatchSource . makeReadSource ( handle:  HANDLE ( bitPattern:  UInt ( socket) ) !,  queue:  self . queue) 
114+ #else 
112115        self . readSource =  DispatchSource . makeReadSource ( fileDescriptor:  socket,  queue:  self . queue) 
116+ #endif 
113117        self . readSource? . setEventHandler  {  [ weak self]  in 
114118            self ? . handleDataAvailable ( ) 
115119        } 
@@ -216,7 +220,11 @@ class Connection {
216220            writeSource =  nil 
217221        }  else  if  writeSource ==  nil  { 
218222            // Otherwise ensure we have an active write source to notify us when the next chunk can be sent
223+ #if os(Windows) 
224+             writeSource =  DispatchSource . makeWriteSource ( handle:  HANDLE ( bitPattern:  UInt ( socket) ) !,  queue:  self . queue) 
225+ #else 
219226            writeSource =  DispatchSource . makeWriteSource ( fileDescriptor:  socket,  queue:  self . queue) 
227+ #endif 
220228            writeSource? . setEventHandler  {  [ weak self]  in 
221229                self ? . sendPendingData ( ) 
222230            } 
@@ -292,8 +300,8 @@ class Connection {
292300} 
293301
294302public  class  NetworkMaster :  Module ,  MessageHandler  { 
295-     /// File descriptor of the server socket.
296-     private  var  serverFd :  Int32  =  - 1 
303+     /// File descriptor or SOCKET handle  of the server socket.
304+     private  var  serverFd :  libsocket . socket_t  =  INVALID_SOCKET 
297305
298306    /// Associated fuzzer.
299307    unowned let  fuzzer :  Fuzzer 
@@ -311,7 +319,7 @@ public class NetworkMaster: Module, MessageHandler {
311319    private  var  serverQueue :  DispatchQueue ?   =  nil 
312320
313321    /// Active workers. The key is the socket filedescriptor number.
314-     private  var  workers   =  [ Int32 :  Worker] ( ) 
322+     private  var  workers   =  [ libsocket . socket_t :  Worker] ( ) 
315323
316324    /// Since fuzzer state can grow quite large (> 100MB) and takes long to serialize,
317325    /// we cache the serialized state for a short time.
@@ -334,7 +342,11 @@ public class NetworkMaster: Module, MessageHandler {
334342        } 
335343
336344        self . serverQueue =  DispatchQueue ( label:  " Server Queue  \( serverFd) " ) 
345+ #if os(Windows) 
346+         self . connectionSource =  DispatchSource . makeReadSource ( handle:  HANDLE ( bitPattern:  UInt ( serverFd) ) !,  queue:  serverQueue) 
347+ #else 
337348        self . connectionSource =  DispatchSource . makeReadSource ( fileDescriptor:  serverFd,  queue:  serverQueue) 
349+ #endif 
338350        self . connectionSource? . setEventHandler  { 
339351            let  socket  =  libsocket. socket_accept ( self . serverFd) 
340352            fuzzer. async   { 
@@ -381,7 +393,7 @@ public class NetworkMaster: Module, MessageHandler {
381393        } 
382394    } 
383395
384-     private  func  handleNewConnection( _ socket:  Int32 )  { 
396+     private  func  handleNewConnection( _ socket:  libsocket . socket_t )  { 
385397        guard  socket >  0  else  { 
386398            return  logger. error ( " Failed to accept client connection " ) 
387399        } 
@@ -647,17 +659,16 @@ public class NetworkWorker: Module, MessageHandler {
647659    } 
648660
649661    private  func  connect( )  { 
650-         var  fd :  Int32  =  - 1 
662+         var  fd :  libsocket . socket_t  =  INVALID_SOCKET 
651663        for  _  in  0 ..< 10  { 
652664            fd =  libsocket. socket_connect ( masterHostname,  masterPort) 
653-             if  fd >=   0  { 
665+             if  fd !=  INVALID_SOCKET  { 
654666                break 
655-             }  else  { 
656-                 logger. warning ( " Failed to connect to master. Retrying in 30 seconds " ) 
657-                 Thread . sleep ( forTimeInterval:  30 ) 
658667            } 
668+             logger. warning ( " Failed to connect to master. Retrying in 30 seconds " ) 
669+             Thread . sleep ( forTimeInterval:  30 ) 
659670        } 
660-         if  fd <   0  { 
671+         if  fd ==  INVALID_SOCKET  { 
661672            logger. fatal ( " Failed to connect to master " ) 
662673        } 
663674
0 commit comments