news.utdallas.edu!convex!tchrist Thu Feb 25 11:52:17 CST 1993
Article: 1074 of comp.lang.perl
Xref: feenix.metronet.com comp.lang.perl:1074
Newsgroups: comp.lang.perl
Path: feenix.metronet.com!news.utdallas.edu!convex!tchrist
From: Tom Christiansen <
[email protected]>
#Subject: Re: SUMMARY: Timeout on Connect
Originator:
[email protected]
Sender:
[email protected] (news access account)
Message-ID: <
[email protected]>
Date: Thu, 18 Feb 1993 04:07:48 GMT
Reply-To:
[email protected] (Tom Christiansen)
References: <
[email protected]>
Nntp-Posting-Host: pixel.convex.com
Organization: Convex Computer Corporation, Colorado Springs, CO
Keywords: Summary, sockets, connect, timeouts
X-Disclaimer: This message was written by a user at CONVEX Computer
Corp. The opinions expressed are those of the user and
not necessarily those of CONVEX.
Lines: 38
>From the keyboard of
[email protected] (Jack Stewart):
:There doesn't appear to be a way to make some sort of magic syscall to
:change the timeouts on the connect function either in C or perl.
:However the method that worked best for me was to fork a child and do
:all of the socket operations (including IO) within that child. I
:could then kill the child if it had not finished in time.
: if (!socket(S,$AF_INET,$SOCK_STREAM,$proto)) {die "$!\n;"}
: if (!bind(S,$this)) {die "$!\n;"}
: if (connect(S,$primary)) {
You don't have to use an extra process to zap the connect. As when
you're timing out reads, send yourself an alarm. Here's how I might
do it:
$TIMEOUT = 15;
sub Timer { die "Alarm Clock" }
$SIG{ALRM} = Timer;
socket(S, &AF_INET, &SOCK_STREAK, $proto) || die "socket: $!";
bind (S, $this) || die "bind: $!";
eval {
alarm($TIMEOUT);
connect(S, $primary) || die "connect: $!";
alarm(0);
};
if ($@ && $@ !~ /Alarm Clock/) {
die $@;
}
--tom
--
Tom Christiansen
[email protected] convex!tchrist
The debate rages on: Is PL/I Bachtrian or Dromedary?