From d41289ade451565cfd0ad9edaa1ef05aaf37ccaf Mon Sep 17 00:00:00 2001 From: rudolfkoenig Date: Thu, 17 Feb 2022 16:44:12 +0000 Subject: [PATCH] 93_FHEM2FHEM.pm: fix nonblocking SSL accept (FOrum #126253) git-svn-id: https://svn.fhem.de/fhem/trunk@25694 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/93_FHEM2FHEM.pm | 28 ++++++++-------------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/fhem/FHEM/93_FHEM2FHEM.pm b/fhem/FHEM/93_FHEM2FHEM.pm index ce4a3d0a1..e2b108afb 100644 --- a/fhem/FHEM/93_FHEM2FHEM.pm +++ b/fhem/FHEM/93_FHEM2FHEM.pm @@ -138,14 +138,14 @@ sub FHEM2FHEM_Read($) { my ($hash) = @_; + my $buf; + my $res = sysread($hash->{TCPDev}, $buf, 256); - my $buf = FHEM2FHEM_SimpleRead($hash); - my $name = $hash->{NAME}; - - ########### - # Lets' try again: Some drivers return len(0) on the first read... - if(defined($buf) && length($buf) == 0) { - $buf = FHEM2FHEM_SimpleRead($hash); + if($hash->{SSL} && !defined($res) && $! == EWOULDBLOCK) { + 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); + return ""; } if(!defined($buf) || length($buf) == 0) { @@ -153,6 +153,7 @@ FHEM2FHEM_Read($) return; } + my $name = $hash->{NAME}; return if(IsDisabled($name)); my $excl = AttrVal($name, "excludeEvents", undef); my $threshold = AttrVal($name, "loopThreshold", 0); # 122300 @@ -352,19 +353,6 @@ FHEM2FHEM_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 FHEM2FHEM_Set($@) {