FTP Server busy waiting when file descriptors are exhausted
Thomas Rauscher
trauscher at loytec.com
Mon Mar 27 13:37:07 UTC 2006
Hi,
we've found a bug in the RTEMS FTP server and would like to develop a
patch.
The problem is also described in PR930.
If the FTP server is running (control socket already open), and all FDs
are
used and a new data connection is started, the FTP server ends up in a
loop in its daemon() function. This loop continues until there are FDs
available
again. This results in 100% CPU usage and the FTP server prints
syslog: ftpd: Error accepting control connection: Too many open files in
system
syslog: ftpd: Error accepting control connection: Too many open files in
system
syslog: ftpd: Error accepting control connection: Too many open files in
system
syslog: ftpd: Error accepting control connection: Too many open files in
system
syslog: ftpd: Error accepting control connection: Too many open files in
system
syslog: ftpd: Error accepting control connection: Too many open files in
system
syslog: ftpd: Error accepting control connection: Too many open files in
system
syslog: ftpd: Error accepting control connection: Too many open files in
system
syslog: ftpd: Error accepting control connection: Too many open files in
system
....
The problem is that there is no way to remove the connection request in
the control
socket (besides closing it and reopening it).
There are two appearent fixes:
1) Add a sleep() in the FTP server (less intrusive, but doesn't fix the
problem)
2) Close control socket and open again. However, what should happens if
the control
socket cannot be reopened? This would be even worse. AFAIK, there is
no flush
function for listening sockets.
I would like to start some discussion which solution is preferable or if
there are
different ones. The best answer anyway would be, that it is possible to
flush a listening socket without closing it ...
Regards,
Thomas Rauscher
--
Thomas Rauscher
LOYTEC electronics GmbH
More information about the users
mailing list