使用多播UDP的C网络记录器?

时间:2012-08-15 09:26:20

标签: c linux logging udp multicast

我可以从我的Linux(C)应用程序调用库的任何建议,以便使用多播UDP将简单日志消息发送给碰巧在网络上侦听的任何人?

2 个答案:

答案 0 :(得分:2)

您不需要库来发送组播数据包。将UDP消息发送到多播套接字仅比将其发送到单播地址要复杂得多。

特别是,您需要使用setsockopt来设置数据包的IP_MULTICAST_TTL

接收方稍微困难 - 您必须使用setsockopt IP_ADD_MEMBERSHIP加入特定的多播群组才能接收发送给它的消息。

这些选项都记录在man 7 ip

答案 1 :(得分:0)

当你问“任何一个图书馆的推荐”时,我认为你不仅仅想要标准的c库,因为我从未见过有人问过是否有人推荐c库到c开发。显然你不需要任何比c库更多的东西,但我的答案完全符合你的问题,或者,问题可能不太好。

您可以使用优秀的ZeroMQ和EPGM协议(封装在UDP内)

zmq_pgm - ØMQ reliable multicast transport using PGM

在服务器端

void *context = zmq_init(1);
assert(context);
void *broadcast = zmq_socket(context, ZMQ_PUB);
assert(broadcast);
rc = zmq_bind(broadcast, "epgm://192.168.0.123:5555");
assert(rc==0);
rc = s_send(broadcast, "Hello world!");
assert(rc==0);

在客户端:

void *context = zmq_init(1);
assert(context);
void *watch = zmq_socket(context, ZMQ_SUB);
assert(watch);    
rc = zmq_connect(watch, "epgm://192.168.0.123:5555");
assert(rc==0);
char *message = s_receive(watch);
assert(message);