【问题标题】:Construct Socket Object by File Descriptor通过文件描述符构造 Socket 对象
【发布时间】:2013-10-26 10:57:00
【问题描述】:

我有一个文件描述符 (0/stdin),我想在 D 中构造一个 Socket 对象。我该怎么做?似乎没有合适的构造函数。

【问题讨论】:

    标签: sockets d file-descriptor dmd unix-socket


    【解决方案1】:

    有一个标记为“使用现有套接字句柄”的构造函数,它接受一个 socket_t。您可以将 int 强制转换为 socket_t(socket_t 是 Unix 系统上基于 int 的枚举)。

        // it requires an address family but i don't think it matters much
        auto socket = new Socket(cast(socket_t) 0, AddressFamily.INET);
    

    这将使您构建,尽管随后使用它会导致“非套接字上的套接字操作”错误,因为 D 的套接字调用 send() 和 recv() 而不是 write() 和 read(),所以我不知道如何让它真正有用......

    【讨论】:

    • 对我来说效果很好!我的应用程序开始运行,因此标准输入流实际上是一个套接字。没想到 socket_t 会是一个文件描述符。
    • 啊,当然,很酷。顺便说一句,如果你想另辟蹊径,有一个名为 Socket.handle() 的方法会返回一个 socket_t。在某些情况下它会隐式转换为 int,但如果不是,您也可以显式转换它,然后在其上使用常规的 unix 文件函数。
    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多