@@ -16,43 +16,10 @@ import Atomics
1616import CNIOLinux
1717import NIOCore
1818
19- public struct MetadataEnvelope {
20- public var data : ByteBuffer
21- public var controlData : MessageMetadata ? = nil
22-
23- public init ( data: ByteBuffer ) {
24- self . data = data
25- }
26-
27- public init ( data: ByteBuffer , controlData: MessageMetadata ? ) {
28- self . data = data
29- self . controlData = controlData
30- }
31-
32- /// Any metadata associated with an
33- public struct MessageMetadata : Hashable , Sendable {
34- init ( ) {
35- var m : msghdr = . init( )
36- // Create buffer for file descriptor
37- let fake_fd = 6666
38- let fd_pointer = UnsafeMutableRawPointer ( bitPattern: fake_fd)
39- m. msg_control = fd_pointer
40- m. msg_controllen = MemoryLayout . size ( ofValue: fake_fd)
41- // TODO other platoforms
42- let cm : UnsafeMutablePointer < cmsghdr > = CNIOLinux_CMSG_FIRSTHDR ( & m)
43- cm. pointee. cmsg_level = SOL_SOCKET
44- cm. pointee. cmsg_type = Int32 ( SCM_RIGHTS)
45- cm. pointee. cmsg_len = MemoryLayout . size ( ofValue: fake_fd)
46-
47- // TODO send `m`
48- }
49- }
50- }
51-
5219private struct PendingStreamWrite {
5320 var data : IOData
5421 var promise : Optional < EventLoopPromise < Void > >
55- var metadata : MetadataEnvelope ?
22+ var metadata : AddressedEnvelope < ByteBuffer > . Metadata ?
5623}
5724
5825/// Write result is `.couldNotWriteEverything` but we have no more writes to perform.
@@ -404,7 +371,10 @@ final class PendingStreamWritesManager: PendingWritesManager {
404371 func add( data: IOData , promise: EventLoopPromise < Void > ? ) -> Bool {
405372 assert ( self . isOpen)
406373 self . state. append ( PendingStreamWrite ( data: data, promise: promise) )
374+ return _add ( )
375+ }
407376
377+ private func _add( ) -> Bool {
408378 if self . state. bytes > waterMark. high
409379 && channelWritabilityFlag. compareExchange ( expected: true , desired: false , ordering: . relaxed) . exchanged
410380 {
@@ -415,6 +385,14 @@ final class PendingStreamWritesManager: PendingWritesManager {
415385 return true
416386 }
417387
388+ func add( envelope: AddressedEnvelope < ByteBuffer > , promise: EventLoopPromise < Void > ? ) -> Bool {
389+ assert ( self . isOpen)
390+ self . state. append (
391+ PendingStreamWrite ( data: . byteBuffer( envelope. data) , promise: promise, metadata: envelope. metadata)
392+ )
393+ return _add ( )
394+ }
395+
418396 /// Returns the best mechanism to write pending data at the current point in time.
419397 var currentBestWriteMechanism : WriteMechanism {
420398 self . state. currentBestWriteMechanism
@@ -434,6 +412,7 @@ final class PendingStreamWritesManager: PendingWritesManager {
434412 scalarFileWriteOperation: ( CInt , Int , Int ) throws -> IOResult < Int >
435413 ) throws -> OverallWriteResult {
436414 try self . triggerWriteOperations { writeMechanism in
415+ print ( #function, writeMechanism)
437416 // TODO: add with metadata calls.
438417 switch writeMechanism {
439418 case . scalarBufferWrite:
0 commit comments