At first I could not recreate the socket leak even when following your instructions.
I then used strace on kstars and discovered that it (actually the QT layer) was constantly looking for phonon4qt5_backend from the qt /usr/lib install. Looking up phonon4qt5 in the system software manager I found several KDE provides packages including a back end gstreamer package. I do not use KDE (just not a fan) and so my system does not have this package installed.
I installed the package.
Afterward at the end of each image capture I got an annoying sound. Worse, when I took multiple images in the scheduler kstars leaked a socket pair per image (in addition playing the sound). It did not leak sockets with preview.
I then removed the package (phonon4qt5-backend-gstreamer) and the socket leak vanished.
If you use KDE you can test if disabling sound notifications stops the socket leak ( option to disable failure sounds ), or if you do not use KDE try removing the package I listed above and restart kstars.
Obviously a real fix is needed, but I am not familiar enough with the kstars source code to be helpful here (I am more of a low level software guy).
I experimented with many short exposures while monitoring the files held open by kstars, indiserver, and indi_asi_ccd.
I saw no open file changes for indiserver or indi_asi_ccd.
For kstars after the first exposure there were 6 additional files held open: a socket, a pair of event fds, /dev/urandom, and the image file (open twice).
When I took many images the number of open files remained the same, with only the open image file changing.
However, if the number of fits viewers increases, then the number of files help open also increases -- I can only reproduce this when I trigger the bug where the image download takes longer than the image exposure, which we know is an issue.
When you think kstars or indi is holding open too many files please get the pids for kstars, indiserver and indi_asi_ccd, and then for each please list the open files:
ls -l /proc/<pid>/fd
Where <pid> is the process pid -- you may want to redirect the output of each ls command to a file.
Then post here the results of what you've found.
An ASI software engineer replied to my post on the ZWO forum indicating that the long delay for for the exposure completion status to switch from working to success was expected.
This is a bit disappointing, but without access to the code I cannot guess what it is doing that is taking so long.