> https://perldoc.perl.org/functions/print says that 'print' would return true > if successful and doesn't say what it returns otherwise. It also says that > "Printing to a closed pipe or socket will generate a SIGPIPE signal."
Looks like print returns 1 if it succeeds, undef if not: $ perl -wE 'my $res = print "hi mom\n"; say $res' hi mom 1 $ perl -wE 'my $res = print OUT "hi mom\n"; say $res' Name "main::OUT" used only once: possible typo at -e line 1. print() on unopened filehandle OUT at -e line 1. Use of uninitialized value $res in say at -e line 1. $ perl -E 'open(OUT, ">", STDERR) ;my $res = print OUT "hi mom\n"; say $res' 1 $ perl -wE 'open(OUT, ">", STDERR); close OUT ;my $res = print OUT "hi mom\n"; say $res' print() on closed filehandle OUT at -e line 1. Use of uninitialized value $res in say at -e line 1. >So I tried to install a signal handler, but either I did that wrong, or no signal was generated. What can I do? Well, seeing a SIGPIPE would mean it's failed already, so it's not going to get you any further. Showing your code might help in debugging. On Thu, Sep 30, 2021 at 12:44 PM hw <h...@adminart.net> wrote: > Hi, > > I have a program in which I'm creating an UDP socket with IO::Socket::INET > to > a device on my LAN. Opening the socket yields no error. Writing to the > socket with 'print' works fine. The device sends data back, and receiving > the > data works fine. > > But it doesn't work when the device is offline, like when I pull the > network > cable the device is connected to. Of course it's obvious that it doesn't > work, and I'm getting an error message: > > > print() on closed filehandle GEN0 at ... > > > My program keeps running nonetheless, which is ok. > > Now the problem is that my program needs a way to detect whether the > device is > offline or not so I can make it try to reconnect. > > Fortunately, IO::Socket has a 'connected' method, yet unfortunately, the > method can't really tell whether the socket is actually open or not > (especially with UDP sockets, I guess). > > But then, there must be a way to figure this out because otherwise 'print' > wouldn't give an error message when the socket is not open. > > So how can I either find out in advance if a 'print' will be successful, > or how > can I find out if 'print' was successful or not? It's like I'm seeing the > error message and there isn't anything I could do about it. > > https://perldoc.perl.org/functions/print says that 'print' would return > true > if successful and doesn't say what it returns otherwise. It also says > that > "Printing to a closed pipe or socket will generate a SIGPIPE signal." > > So I tried to install a signal handler, but either I did that wrong, or no > signal was generated. What can I do? > > > > > -- > To unsubscribe, e-mail: beginners-unsubscr...@perl.org > For additional commands, e-mail: beginners-h...@perl.org > http://learn.perl.org/ > > > -- a Andy Bach, afb...@gmail.com 608 658-1890 cell 608 261-5738 wk