Socket: Return Int32 and not FileHandle for uds receives (#398)

Gives more flexibility. The caller doesn't need to carry around this
FileHandle object if they don't really need it.
This commit is contained in:
Danny Canter
2025-11-10 15:48:06 -08:00
committed by GitHub
parent 055b697037
commit cfe4fd77cb
3 changed files with 5 additions and 4 deletions
@@ -306,7 +306,7 @@ extension Socket {
/// Receive a file descriptor via SCM_RIGHTS control message.
/// This is commonly used for passing file descriptors between processes via Unix domain sockets.
public func receiveFileDescriptor() throws -> FileHandle {
public func receiveFileDescriptor() throws -> Int32 {
let handle = try state.withLock { currentState in
guard currentState.socketState == .connected else {
throw SocketError.invalidOperationOnSocket("receiveFileDescriptor")
@@ -361,7 +361,7 @@ extension Socket {
throw SocketError.invalidFileDescriptor
}
return FileHandle(fileDescriptor: fd, closeOnDealloc: true)
return fd
}
public func read(buffer: inout Data) throws -> Int {
@@ -106,7 +106,8 @@ final class SocketTests {
let originalFD = testFileHandle.fileDescriptor
try sendFileDescriptor(socket: sendSocket, fd: originalFD)
let receivedFileHandle = try recvSocket.receiveFileDescriptor()
let receivedFd = try recvSocket.receiveFileDescriptor()
let receivedFileHandle = FileHandle(fileDescriptor: receivedFd)
defer { try? receivedFileHandle.close() }
try #require(receivedFileHandle.fileDescriptor != originalFD, "Received FD should be different")
@@ -65,7 +65,7 @@ public final class ConsoleSocket: Sendable {
}
/// Receive the PTY master file descriptor from runc
public func receiveMaster() throws -> FileHandle {
public func receiveMaster() throws -> Int32 {
let connection = try socket.accept()
defer { try? connection.close() }