【发布时间】:2017-09-28 09:03:07
【问题描述】:
我想要做什么
我正在开发一个通过 TCP 连接到硬件的库。该库提供了一些用于在远程硬件上设置参数的函数。为了使这个库易于使用,我希望 connect 函数创建一个连接状态 struct / 对象,该指针将由使用此类的软件调用保存。这样,它可以一次连接到多个目标,并让每个连接的句柄传递给库的其他函数。
以下是相关源码:
#include <boost/array.hpp>
#include <boost/asio.hpp>
using boost::asio::ip::tcp;
struct connection_state {
boost::asio::io_service *io_service;
tcp::socket *socket;
bool connected = false;
};
__stdcall int connect(void **state, const char *host, int port) {
// create connection state object
struct connection_state *s = (connection_state *)calloc(1, sizeof(struct connection_state));
if (!s) {
// we did not get the memory
return -ENOMEM;
}
// bend the state pointer to point to our new object
*state = (void *)s;
// create ioservice object and put it in state
s->io_service = new boost::asio::io_service();
// create socket and put it in state
s->socket = new tcp::socket(s->io_service); // THIS LINE FAILS
// create resolver on stack
tcp::resolver resolver(s->io_service);
// create query
tcp::resolver::query query(host, std::to_string(port));
tcp::resolver::iterator itt;
// resolve IP / hostname
itt = resolver.resolve(query);
// connect!
boost::asio::connect(s->socket, itt);
// we are now connected!
s->connected = true;
return 0;
}
此代码基于 boost 文档中的 example TCP client,但我试图将 socket 和 io_service 对象以我可以传递的某种形式传递。
我的问题
这无法构建:
pc/PC.cpp: In function ‘int connect(void**, const char*, int)’:
pc/PC.cpp:67:44: error: no matching function for call to
‘boost::asio::basic_stream_socket<boost::asio::ip::tcp>::basic_stream_socket(boost::asio::io_service*&)’
s->socket = new tcp::socket(s->io_service); // THIS LINE FAILS
^
我真的不知道为什么我不能以这种方式创建一个新的tcp::socket。
【问题讨论】:
标签: c++ sockets pointers boost tcp