fhem.pl: preparing for nonblocking Http
git-svn-id: https://svn.fhem.de/fhem/trunk@4501 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
27
fhem/fhem.pl
27
fhem/fhem.pl
@@ -462,10 +462,12 @@ while (1) {
|
|||||||
|
|
||||||
foreach my $p (keys %selectlist) {
|
foreach my $p (keys %selectlist) {
|
||||||
my $hash = $selectlist{$p};
|
my $hash = $selectlist{$p};
|
||||||
|
if(defined($hash->{FD})) {
|
||||||
vec($rin, $hash->{FD}, 1) = 1
|
vec($rin, $hash->{FD}, 1) = 1
|
||||||
if(defined($hash->{FD}));
|
if(!defined($hash->{directWriteFn}));
|
||||||
vec($win, $hash->{FD}, 1) = 1
|
vec($win, $hash->{FD}, 1) = 1
|
||||||
if(defined($hash->{FD}) && defined($hash->{$wbName}));
|
if(defined($hash->{directWriteFn}) || defined($hash->{$wbName}));
|
||||||
|
}
|
||||||
vec($ein, $hash->{EXCEPT_FD}, 1) = 1
|
vec($ein, $hash->{EXCEPT_FD}, 1) = 1
|
||||||
if(defined($hash->{"EXCEPT_FD"}));
|
if(defined($hash->{"EXCEPT_FD"}));
|
||||||
}
|
}
|
||||||
@@ -511,14 +513,26 @@ while (1) {
|
|||||||
# attached again.
|
# attached again.
|
||||||
foreach my $p (keys %selectlist) {
|
foreach my $p (keys %selectlist) {
|
||||||
my $hash = $selectlist{$p};
|
my $hash = $selectlist{$p};
|
||||||
next if(!$hash || !$hash->{NAME} || !$defs{$hash->{NAME}}); # due to delete
|
my $isDev = ($hash && $hash->{NAME} && $defs{$hash->{NAME}});
|
||||||
|
my $isDirect = ($hash && ($hash->{directReadFn} || $hash->{directWriteFn}));
|
||||||
|
next if(!$isDev && !$isDirect);
|
||||||
|
|
||||||
CallFn($hash->{NAME}, "ReadFn", $hash)
|
if(defined($hash->{FD}) && vec($rout, $hash->{FD}, 1)) {
|
||||||
if(defined($hash->{FD}) && vec($rout, $hash->{FD}, 1));
|
if($hash->{directReadFn}) {
|
||||||
|
$hash->{directReadFn}($hash);
|
||||||
|
} else {
|
||||||
|
CallFn($hash->{NAME}, "ReadFn", $hash);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if((defined($hash->{$wbName}) || defined($hash->{directWriteFn})) &&
|
||||||
|
defined($hash->{FD}) && vec($wout, $hash->{FD}, 1)) {
|
||||||
|
|
||||||
|
if($hash->{directWriteFn}) {
|
||||||
|
$hash->{directWriteFn}($hash);
|
||||||
|
|
||||||
|
} else {
|
||||||
my $wb = $hash->{$wbName};
|
my $wb = $hash->{$wbName};
|
||||||
if(defined($wb) && defined($hash->{FD}) && vec($wout, $hash->{FD}, 1)) {
|
|
||||||
my $ret = syswrite($hash->{CD}, $wb);
|
my $ret = syswrite($hash->{CD}, $wb);
|
||||||
if(!$ret || $ret < 0) {
|
if(!$ret || $ret < 0) {
|
||||||
Log 4, "Write error to $p, deleting $hash->{NAME}";
|
Log 4, "Write error to $p, deleting $hash->{NAME}";
|
||||||
@@ -531,6 +545,7 @@ while (1) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(defined($hash->{"EXCEPT_FD"}) && vec($eout, $hash->{EXCEPT_FD}, 1)) {
|
if(defined($hash->{"EXCEPT_FD"}) && vec($eout, $hash->{EXCEPT_FD}, 1)) {
|
||||||
CallFn($hash->{NAME}, "ExceptFn", $hash);
|
CallFn($hash->{NAME}, "ExceptFn", $hash);
|
||||||
|
|||||||
Reference in New Issue
Block a user