From 9d9ee2bd30384e2aa7d7593ca0e78f976f34d734 Mon Sep 17 00:00:00 2001 From: rudolfkoenig Date: Fri, 8 Oct 2010 07:07:40 +0000 Subject: [PATCH] Eliminating bad filedescriptor. Experimental git-svn-id: https://svn.fhem.de/fhem/trunk@724 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/fhem.pl | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/fhem/fhem.pl b/fhem/fhem.pl index 6ad64bdbc..2d6efc97f 100755 --- a/fhem/fhem.pl +++ b/fhem/fhem.pl @@ -160,7 +160,7 @@ my $nextat; # Time when next timer will be triggered. my $intAtCnt=0; my %duplicate; # Pool of received msg for multi-fhz/cul setups my $duplidx=0; # helper for the above pool -my $cvsid = '$Id: fhem.pl,v 1.111 2010-09-30 13:12:27 rudolfkoenig Exp $'; +my $cvsid = '$Id: fhem.pl,v 1.112 2010-10-08 07:07:40 rudolfkoenig Exp $'; my $namedef = "where is either:\n" . "- a single device name\n" . @@ -331,6 +331,21 @@ while (1) { if($nfound < 0) { next if ($! == 0); + + # Handling "Bad file descriptor". This is a programming error. + if($! eq "Bad file descriptor") { + my $nbad = 0; + foreach my $p (keys %selectlist) { + my ($tin, $tout) = ('', ''); + vec($tin, $selectlist{$p}{FD}, 1) = 1; + if(select($tout=$tin, undef, undef, 0) < 0) { + Log 0, "ERROR: Found & deleted bad fileno for $p"; + delete($selectlist{$p}); + $nbad++; + } + } + next if($nbad > 0); + } die("Select error $nfound / $!\n"); }