On Wed, 19 Jul 2006 12:59:36 +0200, Frank Schmirler wrote
I would like to raise an issue with SVDRP. When the client doesn't send QUIT but simply closes the connection, VDR happily ignores the EOF returned by read. The socket will remain in state CLOSE_WAIT until it's finally closed due to the SVDRP timeout. In the meantime the SVDRP port remains blocked for other clients.
An update on this issue: with the implementation used before vdr-1.2.2 you *will* get a broken pipe message, as cSVDRP::Close() tries to send a goodby message to the client. This is not a problem, but as a "clean" solution I would suggest:
--- svdrp.c.orig 2006-07-20 11:34:10.000000000 +0200 +++ svdrp.c 2006-07-20 11:39:51.000000000 +0200 @@ -1575,8 +1575,11 @@ isyslog("lost connection to SVDRP client"); Close(); } - else - break; + else { + isyslog("SVDRP client closed connection"); + file.Close(); + DELETENULL(PUTEhandler); + } } if (Setup.SVDRPTimeout && time(NULL) - lastActivity > Setup.SVDRP Timeout) { isyslog("timeout on SVDRP connection");
Cheers, Frank