@@ -122,7 +122,7 @@ fileprivate extension URLSession._MultiHandle {
122
122
let handler = DispatchWorkItem { [ weak self] in
123
123
self ? . performAction ( for: socket)
124
124
}
125
- ss. createSources ( with: action, fileDescriptor : Int ( socket) , queue: queue, handler: handler)
125
+ ss. createSources ( with: action, socket : socket, queue: queue, handler: handler)
126
126
}
127
127
return 0
128
128
}
@@ -395,17 +395,25 @@ fileprivate class _SocketSources {
395
395
var readSource : DispatchSource ?
396
396
var writeSource : DispatchSource ?
397
397
398
- func createReadSource( fileDescriptor fd : Int , queue: DispatchQueue , handler: DispatchWorkItem ) {
398
+ func createReadSource( socket : CFURLSession_socket_t , queue: DispatchQueue , handler: DispatchWorkItem ) {
399
399
guard readSource == nil else { return }
400
- let s = DispatchSource . makeReadSource ( fileDescriptor: Int32 ( fd) , queue: queue)
400
+ #if os(Windows)
401
+ let s = DispatchSource . makeReadSource ( handle: HANDLE ( bitPattern: Int ( socket) ) !, queue: queue)
402
+ #else
403
+ let s = DispatchSource . makeReadSource ( fileDescriptor: socket, queue: queue)
404
+ #endif
401
405
s. setEventHandler ( handler: handler)
402
406
readSource = s as? DispatchSource
403
407
s. resume ( )
404
408
}
405
409
406
- func createWriteSource( fileDescriptor fd : Int , queue: DispatchQueue , handler: DispatchWorkItem ) {
410
+ func createWriteSource( socket : CFURLSession_socket_t , queue: DispatchQueue , handler: DispatchWorkItem ) {
407
411
guard writeSource == nil else { return }
408
- let s = DispatchSource . makeWriteSource ( fileDescriptor: Int32 ( fd) , queue: queue)
412
+ #if os(Windows)
413
+ let s = DispatchSource . makeWriteSource ( handle: HANDLE ( bitPattern: Int ( socket) ) !, queue: queue)
414
+ #else
415
+ let s = DispatchSource . makeWriteSource ( fileDescriptor: socket, queue: queue)
416
+ #endif
409
417
s. setEventHandler ( handler: handler)
410
418
writeSource = s as? DispatchSource
411
419
s. resume ( )
@@ -424,12 +432,12 @@ fileprivate class _SocketSources {
424
432
}
425
433
extension _SocketSources {
426
434
/// Create a read and/or write source as specified by the action.
427
- func createSources( with action: URLSession . _MultiHandle . _SocketRegisterAction , fileDescriptor fd : Int , queue: DispatchQueue , handler: DispatchWorkItem ) {
435
+ func createSources( with action: URLSession . _MultiHandle . _SocketRegisterAction , socket : CFURLSession_socket_t , queue: DispatchQueue , handler: DispatchWorkItem ) {
428
436
if action. needsReadSource {
429
- createReadSource ( fileDescriptor : fd , queue: queue, handler: handler)
437
+ createReadSource ( socket : socket , queue: queue, handler: handler)
430
438
}
431
439
if action. needsWriteSource {
432
- createWriteSource ( fileDescriptor : fd , queue: queue, handler: handler)
440
+ createWriteSource ( socket : socket , queue: queue, handler: handler)
433
441
}
434
442
}
435
443
}
0 commit comments