Я бы хотел получить доступ к сообщению, полученному от TCP-партнера, используя сокет ZeroMQ ZMQ_STREAM
. В следующем примере в C строка msg
кажется пустой:
/* http.c */
#include <stdio.h>
#include <string.h>
#include <zmq.h>
int main(int argc, char* argv[])
{
void *ctx = zmq_ctx_new();
void *socket = zmq_socket(ctx, ZMQ_STREAM);
int rc = zmq_bind(socket, "tcp://127.0.0.1:8080");
uint8_t id[256];
size_t id_size = 256;
char msg[256];
size_t msg_size = 256;
char http_response[] =
"HTTP/1.0 200 OK\r\n"
"Content-Type: text/html\r\n"
"\r\n"
"<h1>Hello, World!</h1>";
while (1)
{
id_size = zmq_recv(socket, id, 256, 0);
msg_size = zmq_recv(socket, msg, sizeof(msg), 0);
msg[msg_size] = '\0';
printf("REQUEST: %s\n", msg);
zmq_send(socket, id, id_size, ZMQ_SNDMORE);
zmq_send(socket, http_response, strlen(http_response), ZMQ_SNDMORE);
zmq_send(socket, id, id_size, ZMQ_SNDMORE);
zmq_send(socket, 0, 0, ZMQ_SNDMORE);
}
zmq_close(socket);
zmq_ctx_destroy(ctx);
return 0;
}
Компиляция и выполнение:
$ cc -Wall -I/usr/local/include/ -L/usr/local/lib/ -o http http.c -lzmq
$ ./http
REQUEST:
REQUEST:
Я не могу использовать API CZMQ в качестве Я должен положиться на FFI до libzmq
.