从 websocketpp 中的 connection 或 connection_ptr 获取本机套接字描述符?

Posted

技术标签:

【中文标题】从 websocketpp 中的 connection 或 connection_ptr 获取本机套接字描述符?【英文标题】:Get the native socket descriptor from the connection or connection_ptr in websocketpp? 【发布时间】:2013-03-13 12:05:21 【问题描述】:

有没有办法从websocketpp 中的connectionconnection_ptr 获取本机套接字描述符? 在将帧发送到客户端之前,我需要设置 TCP_CORK。我是 Boost.Asio 的新手,请指教。

【问题讨论】:

【参考方案1】:

按照github 代码,您可能会调用 connection_ptr->get_raw_socket().native_handle().

websocketpp::connection 继承自 websocketpp::socket::connectionwebsocket::socket::connection 提供了一个 get_socket() 公共成员函数,该函数返回对 Boost.Asio 套接字的引用。 Boost.Asio 套接字提供了一个 native_handle() 成员函数,该函数返回本机套接字表示。

【讨论】:

[WebSocket++ author here] 这个答案是正确的。两个说明:get_raw_socket() 优于 get_socket()。上面的代码只能在不安全的连接上正常工作。安全连接上的 get_socket() 将返回 TLS 流包装器。 get_raw_socket() 将始终返回最低层(即套接字本身)。如果您使用的是 WebSocket++ 0.3.x,您可以注册一个 socket_init_handler,它将在读取/写入任何内容之前触发,然后您可以使用它在读取/写入打开握手之前设置套接字选项。 感谢彼得的回复。

以上是关于从 websocketpp 中的 connection 或 connection_ptr 获取本机套接字描述符?的主要内容,如果未能解决你的问题,请参考以下文章

websocketpp 和 boost.asio 有啥区别?

如何以 websocketpp::connection_hdl 为键实现 boost::unordered_map?

WebRTC笔记之十九:基于WebSocketPP的TLS客户端和服务器

WebRTC笔记之十九:基于WebSocketPP的TLS客户端和服务器

MtGox API 和 websocketpp

Qt写websocketpp服务端