I want to send messages to rabbitmq from c++ via libuv, amqp-cpp.
In Windows environment, TCP communication with AMQPCPP seems to be a bit problematic, so I made the code like below.
static void alloc_cb(uv_handle_t* handle, size_t size, uv_buf_t* buf) {
*buf = uv_buf_init((char *)malloc(size), size);
}
void on_close(uv_handle_t* handle)
{
printf("closed.");
}
void on_write(uv_write_t* req, int status)
{
if (status) {
perror("uv_write error ");
return;
}
printf("wrote.\n");
free(req);
//uv_close((uv_handle_t*)req->handle, on_close);
}
void on_read(uv_stream_t* tcp, ssize_t nread, const uv_buf_t* buf)
{
printf("on_read. %p\n", tcp);
if (nread >= 0) {
//printf("read: %s\n", tcp->data);
printf("read: %s\n", buf->base);
}
else {
//we got an EOF
uv_close((uv_handle_t*)tcp, on_close);
}
//cargo-culted
free(buf->base);
}
void write2(uv_stream_t* stream, char* data, int len2) {
uv_buf_t buffer[1];
buffer[0].base = data;
buffer[0].len = len2;
uv_write_t* req = (uv_write_t*)malloc(sizeof(uv_write_t));
uv_write(req, stream, buffer, 1, on_write);
}
void on_connect(uv_connect_t* connection, int status)
{
if (status < 0) {
printf("failed to connect\n"); return;
}
printf("connected. %p %d\n", connection, status);
uv_stream_t* stream = connection->handle;
free(connection);
write2(stream, (char*)"test!", 10);
uv_read_start(stream, alloc_cb, on_read);
}
int main() {
uv_loop_t* loop = uv_default_loop();
uv_tcp_t* pSock = (uv_tcp_t*)malloc(sizeof(uv_tcp_t));
uv_tcp_init(loop, pSock);
uv_tcp_keepalive(pSock, 1, 60);
struct sockaddr_in dest;
uv_ip4_addr("10.10.50.242", 5672, &dest);
uv_connect_t* pConn = (uv_connect_t *)malloc(sizeof(uv_connect_t));
printf("allocated %p\n", pConn);
uv_tcp_connect(pConn, pSock, (const struct sockaddr*)&dest, on_connect);
uv_run(loop, UV_RUN_DEFAULT);
}
However, when I do this, I get the following error in rabbitmq's logs.
2023-02-28 15:49:10.901000+09:00 [info] <0.17112.1> accepting AMQP connection <0.17112.1> (ipaddr:51509 -> ipaddr:5672)
2023-02-28 15:49:10.901000+09:00 [error] <0.17112.1> closing AMQP connection <0.17112.1> (ipaddr:51509 -> ipaddr:5672):
2023-02-28 15:49:10.901000+09:00 [error] <0.17112.1> {bad_header,<<116,101,115,116,33,0,0,0>>}
I'm new to this, so there's a lot I don't know, but can you shed some light on this?