[syslog-ng]Bug in unix_stream/dgram() dest drivers 1.6.0rc4
Andreas Schulze
syslog-ng@lists.balabit.hu
Tue, 17 Feb 2004 09:04:15 +0100
>>it seems I've found a bug in the unix_stream/unix_dgram
>>destination drivers.
>>
>>The problem is, that running sysng with something like
>>
>> destination d_dgram { unix-dgram("/tmp/dgram_sock"); };
>>
>>it doesn't create the socket in the file system, so the
>>connect() fails. Seems that bind_unix_socket() is never called.
>
> bind is called by the program creating the UNIX dgram socket. in this
> case you instructed syslog-ng to connect to such a socket, where binding
> is not necessary.
Yepp. But the problem ist, that syslogd doesn't start, if the socket
wasn't created via bind() by a running program.
I think, the general question is:
Who is responsible to create (bind()) the socket?
The client or the server process? In general IMHO the server process.
In destination {unix-dgram()} context syslogd acts like a server
process and should do the bind().
Of course, in source {unix-dgram()} context syslogd acts like a client
process and could assume, that a running server has created the socket
before.
> What do you want to use those sockets for? Maybe you wanted to create
> message sources?
I want to use AF_UNIX() destination stuff as some kind
of message queues for syslogd.
syslogd writes to, some other apps reads from and proccess
and transform the messages.
--
Best regards --Andreas Schulze
[phone: +49.5246.80.1275, fax: +49.5246.80.2275]
| I believe, it was Dennis Ritchie who said something like:
| "C is rarely the best language for a given task,
| but it's often the second-best".
| The implication being that: "[...]"
| http://www.ioccc.org/1990/dds.c