2929// SOFTWARE.
3030//
3131
32+ #if canImport(FoundationEssentials)
33+ import FoundationEssentials
34+ #else
3235import Foundation
36+ #endif
3337
3438public protocol AsyncSocketPool : Sendable {
3539
@@ -63,19 +67,35 @@ public extension AsyncSocketPool where Self == SocketPool<Poll> {
6367public struct AsyncSocket : Sendable {
6468
6569 public struct Message : Sendable {
66- public let peerAddress : any SocketAddress
67- public let bytes : [ UInt8 ]
68- public let interfaceIndex : UInt32 ?
69- public let localAddress : ( any SocketAddress ) ?
70+ public var peerAddress : any SocketAddress
71+ public var payload : Data
72+ public var interfaceIndex : UInt32 ?
73+ public var localAddress : ( any SocketAddress ) ?
7074
75+ public init (
76+ peerAddress: any SocketAddress ,
77+ payload: Data ,
78+ interfaceIndex: UInt32 ? = nil ,
79+ localAddress: ( any SocketAddress ) ? = nil
80+ ) {
81+ self . peerAddress = peerAddress
82+ self . payload = payload
83+ self . interfaceIndex = interfaceIndex
84+ self . localAddress = localAddress
85+ }
86+
87+ @available ( * , deprecated, renamed: " payload " )
88+ public var bytes : [ UInt8 ] { Array ( payload) }
89+
90+ @available ( * , deprecated, renamed: " init(peerAddress:payload:) " )
7191 public init (
7292 peerAddress: any SocketAddress ,
7393 bytes: [ UInt8 ] ,
7494 interfaceIndex: UInt32 ? = nil ,
7595 localAddress: ( any SocketAddress ) ? = nil
7696 ) {
7797 self . peerAddress = peerAddress
78- self . bytes = bytes
98+ self . payload = Data ( bytes)
7999 self . interfaceIndex = interfaceIndex
80100 self . localAddress = localAddress
81101 }
@@ -169,7 +189,7 @@ public struct AsyncSocket: Sendable {
169189 repeat {
170190 do {
171191 let ( peerAddress, bytes, interfaceIndex, localAddress) = try socket. receive ( length: length)
172- return Message ( peerAddress: peerAddress, bytes : bytes, interfaceIndex: interfaceIndex, localAddress: localAddress)
192+ return Message ( peerAddress: peerAddress, payload : Data ( bytes) , interfaceIndex: interfaceIndex, localAddress: localAddress)
173193 } catch SocketError . blocked {
174194 try await pool. suspendSocket ( socket, untilReadyFor: . read)
175195 } catch {
@@ -228,11 +248,12 @@ public struct AsyncSocket: Sendable {
228248
229249#if !canImport(WinSDK)
230250 public func send(
231- message: [ UInt8 ] ,
251+ message: some Sequence < UInt8 > ,
232252 to peerAddress: some SocketAddress ,
233253 interfaceIndex: UInt32 ? = nil ,
234254 from localAddress: ( any SocketAddress ) ? = nil
235255 ) async throws {
256+ let message = Array ( message)
236257 let sent = try await pool. loopUntilReady ( for: . write, on: socket) {
237258 try socket. send ( message: message, to: peerAddress, interfaceIndex: interfaceIndex, from: localAddress)
238259 }
@@ -241,18 +262,9 @@ public struct AsyncSocket: Sendable {
241262 }
242263 }
243264
244- public func send(
245- message: Data ,
246- to peerAddress: some SocketAddress ,
247- interfaceIndex: UInt32 ? = nil ,
248- from localAddress: ( some SocketAddress ) ? = nil
249- ) async throws {
250- try await send ( message: Array ( message) , to: peerAddress, interfaceIndex: interfaceIndex, from: localAddress)
251- }
252-
253265 public func send( message: Message ) async throws {
254266 try await send (
255- message: message. bytes ,
267+ message: message. payload ,
256268 to: AnySocketAddress ( message. peerAddress) ,
257269 interfaceIndex: message. interfaceIndex,
258270 from: message. localAddress
0 commit comments