From: Rik F. <fa...@di...> - 2003-04-15 18:47:44
|
On 14 Apr 2003 20:49:25 +0300, Aleksey Cheusov <vl...@gm...> wrote: > I have a question. > > Sometimes I inspected dict code and think that most code > is clear to understand. > > But I don't understand what setjmp/longjump (daemon.c) functions are for. > I try to remove them and everything works fine. > Are they really necessary? This causes a dict_terminate to cause dict_daemon to return. In the main look (in dictd.c), if we are at _dict_daemon_limit, then dictd won't fork and the main process will service the request, passing 1 to dict_daemon, which will cause an error code to be printed. In some old code I've been looking at, DICT_DAEMON_LIMIT is set to 100. That's the idea, but I'm not sure if it's working. When the network connection is having trouble and/or the machine is under a heavy load, the dictd daemon terminates -- perhaps because this code isn't working well. This could occur if the longjmp fails, in which case the main process may exit. This is speculation and I haven't tested it. A better solution may be to either: 1) fork all the time, and print a message when the system is too busy, or 2) just drop the connection, on the assumption that a DoS may be in progress. (And, in both cases, eliminate setjmp/longjmp.) |