From 1368ff239ec615512260e1cadf6742ff4f1f144c Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Mon, 4 Mar 2013 19:17:17 +0000 Subject: [PATCH] Implemented UNIX:SEQPACKET, as the FB Labor removed the TCP socket. git-svn-id: https://svn.fhem.de/fhem/trunk@2851 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/00_FBAHA.pm | 19 ++++++++++++++++--- fhem/FHEM/DevIo.pm | 26 +++++++++++++++++++++++++- 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/fhem/FHEM/00_FBAHA.pm b/fhem/FHEM/00_FBAHA.pm index 6aa5fb75c..779c733ed 100755 --- a/fhem/FHEM/00_FBAHA.pm +++ b/fhem/FHEM/00_FBAHA.pm @@ -328,15 +328,20 @@ FBAHA_Ready($) Define
@@ -395,15 +400,23 @@ FBAHA_Ready($) Define
diff --git a/fhem/FHEM/DevIo.pm b/fhem/FHEM/DevIo.pm index 95f756b51..7874e406e 100644 --- a/fhem/FHEM/DevIo.pm +++ b/fhem/FHEM/DevIo.pm @@ -108,7 +108,31 @@ DevIo_OpenDev($$$) Log 3, "Opening $name device $dev" if(!$reopen); - if($dev =~ m/^(.+):([0-9]+)$/) { # host:port + if($dev =~ m/^UNIX:(SEQPACKET|STREAM):(.*)$/) { # FBAHA + my ($type, $fname) = ($1, $2); + my $conn; + eval { + require IO::Socket::UNIX; + $conn = IO::Socket::UNIX->new( + Type=>($type eq "STREAM" ? SOCK_STREAM:SOCK_SEQPACKET), Peer=>$fname); + }; + if($@) { + Log 1, $@; + return $@; + } + + if(!$conn) { + Log(3, "Can't connect to $dev: $!") if(!$reopen); + $readyfnlist{"$name.$dev"} = $hash; + $hash->{STATE} = "disconnected"; + return ""; + } + $hash->{TCPDev} = $conn; + $hash->{FD} = $conn->fileno(); + delete($readyfnlist{"$name.$dev"}); + $selectlist{"$name.$dev"} = $hash; + + } elsif($dev =~ m/^(.+):([0-9]+)$/) { # host:port # This part is called every time the timeout (5sec) is expired _OR_ # somebody is communicating over another TCP connection. As the connect