93_FHEM2FHEM.pm: fix nonblocking SSL accept (FOrum #126253)

git-svn-id: https://svn.fhem.de/fhem/trunk@25694 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rudolfkoenig
2022-02-17 16:44:12 +00:00
parent bae42398ac
commit d41289ade4

View File

@@ -138,14 +138,14 @@ sub
FHEM2FHEM_Read($) FHEM2FHEM_Read($)
{ {
my ($hash) = @_; my ($hash) = @_;
my $buf;
my $res = sysread($hash->{TCPDev}, $buf, 256);
my $buf = FHEM2FHEM_SimpleRead($hash); if($hash->{SSL} && !defined($res) && $! == EWOULDBLOCK) {
my $name = $hash->{NAME}; my $es = $hash->{TCPDev}->errstr;
$hash->{wantWrite} = 1 if($es == &IO::Socket::SSL::SSL_WANT_WRITE);
########### $hash->{wantRead} = 1 if($es == &IO::Socket::SSL::SSL_WANT_READ);
# Lets' try again: Some drivers return len(0) on the first read... return "";
if(defined($buf) && length($buf) == 0) {
$buf = FHEM2FHEM_SimpleRead($hash);
} }
if(!defined($buf) || length($buf) == 0) { if(!defined($buf) || length($buf) == 0) {
@@ -153,6 +153,7 @@ FHEM2FHEM_Read($)
return; return;
} }
my $name = $hash->{NAME};
return if(IsDisabled($name)); return if(IsDisabled($name));
my $excl = AttrVal($name, "excludeEvents", undef); my $excl = AttrVal($name, "excludeEvents", undef);
my $threshold = AttrVal($name, "loopThreshold", 0); # 122300 my $threshold = AttrVal($name, "loopThreshold", 0); # 122300
@@ -352,19 +353,6 @@ FHEM2FHEM_Disconnected($)
DoTrigger($name, "DISCONNECTED"); DoTrigger($name, "DISCONNECTED");
} }
########################
sub
FHEM2FHEM_SimpleRead($)
{
my ($hash) = @_;
my $buf;
if(!defined(sysread($hash->{TCPDev}, $buf, 256))) {
FHEM2FHEM_Disconnected($hash);
return undef;
}
return $buf;
}
sub sub
FHEM2FHEM_Set($@) FHEM2FHEM_Set($@)
{ {