在MacOS上使用Swift从UNIX套接字获取数据

时间:2020-05-03 23:26:16

标签: swift macos sockets unix

我想在使用Swift的Macos上使用UNIX套接字来接收一些字节,没什么大不了的。但是我不能 从套接字读取任何数据。

为什么使用UNIX套接字?我想拥有一个“简单的IPC”。我可以使用TCP / IP,但是现在我想进行这项工作。

我确实使用SocketPort创建了一个套接字

    SocketPort(protocolFamily: AF_UNIX, socketType: SOCK_STREAM, protocol: 0, address: data)

我确实使用以下命令创建了输入流:

    (...)
    CFStreamCreatePairWithSocket(kCFAllocatorDefault, port.socket, &readStream, nil)
    (...)
    self.inputStream = readStream!.takeRetainedValue()
    self.inputStream?.delegate = self
    self.inputStream?.schedule(in: RunLoop.current, forMode: .default)
    self.inputStream?.open()

运行该应用程序后,一切似乎都很好,甚至调用了StreamDelegate协议功能“ stream” 打开输入流后,使用eventCode返回“ openCompleted”。

然后我用'socat'发送一些数据,但是无法在swift应用程序中获取那些字节。

我正在使用XCode,我在某处阅读时添加了网络权利。但是我无法调试套接字。我期望 我将一些数据发送到套接字后,将调用“ stream”函数。

我阅读了其他项目,例如BlueSocket(我会在稍后尝试,但是将其添加到现有的XCode产品中并不容易), 他们似乎处于低级状态(称为Darwin.socket,Darwin.connect ...)。

我可以提供更多代码。我不知道在哪里看。有什么线索吗?建议?

谢谢!

1 个答案:

答案 0 :(得分:0)

我几年前通过编写自己的URLProtocol实现解决了问题。我将其用于Docker,因此添加了URL方案“ docker”。该代码具有很多依赖关系,但是这里是a working commit,您应该可以在其中获得基本思想。

相关问题