Every socket has a built-in timeout initialized to a system dependent deafult. To change this, use POSIX and setsockopt. Specifically:
setsockopt sockid, proto, SO_SNDTIMEO (or SO_RCVTIMEO), ....
read up on what follows since its dependent on the variable passed before. For better control over sockets, look into C or Inline. Additionally, I believe IO::Socket may help you.
AgentM Systems nor Nasca Enterprises nor
Bone::Easy nor Macperl is responsible for the
comments made by
AgentM. Remember, you can build any logical system with NOR.
| [reply] [d/l] |
IO::Socket is no help at all, since I want the code to be
portable across our intranet: Our elderly HP box seems to have
a problem with getprotobyname()
function (I donīt know why and I canīt do anything about that),
so the whole IO::Socket module doesnīt work there. See sample below.
Iīll play around with setsockopt() now. It should help, for
otherwise there seems to be a serious flaw in the whole (Perl?) socket stuff:
What if I donīt know anything about those 30s on the other side?
<sigh>Iīve got 3 bright Perl books, each having a section on sockets,
but none saying anything about the use of setsockopt() ...
</sigh>
Thanks for your help!
--Martin
#!/usr/bin/perl -w
use IO::Socket;
$sock = new IO::Socket::INET (PeerAddr => 'www.perlmonks.org', PeerPor
+t => 80, Proto => 'tcp');
die "Mess: $!" unless $sock;
results is:
IO::Socket::INET: Cannot determine protocol at ./test.pl line 5
Mess: Bad file number at ./test.pl line 6. | [reply] [d/l] [select] |
Yeah, AgentM has probably got it; I'd suggest looking
at the cookbook (the code is available from O'Reilly) for
an example that fits what you're trying to do. It was
never clear to me if syswrite was a better idea than
print SOCK ... except that you shouldn't mix them. Experience
showed my problems were always else where and I could
skip the syswrite/read and use print/<SOCK> as if
it were a normal handle. YMMV wildly though.
a | [reply] |