connect

Hello,

Is there any way to set a timeout for ‘connect’ routine for TCP. I tried on
receive timeout and that did not not work.
Or
If I set the socket non-blocking then how will I be able to find that
‘connect’ succeeds or times out by using select? I tried to set FD_SET on
read\write and I don’t get consistent result from select. What is the usual
way to do this?

Thanks,
Hakim

On Wed, 07 Sep 2005 17:34:35 -0400, Hakim wrote:

Is there any way to set a timeout for ‘connect’ routine for TCP. I tried
on receive timeout and that did not not work. Or
If I set the socket non-blocking then how will I be able to find that
‘connect’ succeeds or times out by using select? I tried to set FD_SET on
read\write and I don’t get consistent result from select. What is the
usual way to do this?

I’m not sure, if it works: did you try ‘setsockopt()’?

Another option is, to install a signal handler for SIGALRM
and to call ‘alarm(timeout)’ just before the connect call
(don’t forget to cancel the alarm with ‘alarm(0)’ directly
after a successful ‘connect()’. Otherwise the signal will slay your
application somewhen later :slight_smile:

HTH,

Karsten.


Karsten P. Hoffmann <karsten.p.hoffmann@web.de>
“I love deadlines. I especially like the whooshing sound
they make as they go flying by.”
[In memoriam Douglas Adams, 1952-2001]

I’m not sure, if it works: did you try ‘setsockopt()’?

Yes, I tried setsockopt to set receive timeout.

Thanks for the second option. It helps to timeout. But it degrades the
performance of the driver heaviliy since connect blocks the whole driver
until timeout. Any idea on how to use select for non-blocking connect to see
whether connect succeeds ot fails?

Hakim

“Karsten P. Hoffmann” <karsten.p.hoffmann@web.de> wrote in message
news:pan.2005.09.07.22.02.24.249193@web.de

On Wed, 07 Sep 2005 17:34:35 -0400, Hakim wrote:
Is there any way to set a timeout for ‘connect’ routine for TCP. I tried
on receive timeout and that did not not work. Or
If I set the socket non-blocking then how will I be able to find that
‘connect’ succeeds or times out by using select? I tried to set FD_SET on
read\write and I don’t get consistent result from select. What is the
usual way to do this?

I’m not sure, if it works: did you try ‘setsockopt()’?

Another option is, to install a signal handler for SIGALRM
and to call ‘alarm(timeout)’ just before the connect call
(don’t forget to cancel the alarm with ‘alarm(0)’ directly
after a successful ‘connect()’. Otherwise the signal will slay your
application somewhen later > :slight_smile:

HTH,

Karsten.


Karsten P. Hoffmann <> karsten.p.hoffmann@web.de
“I love deadlines. I especially like the whooshing sound
they make as they go flying by.”
[In memoriam Douglas Adams, 1952-2001]

Attached is a module that I used to do just that. (You may need to filter
thru the fluff, but the meat is certainly there). See the routine called
“find_session()”.

In my case, I have a program that talks to many PLCs. Each PLC uses a
separate connection or “session”. Like you, I found that if I try to
connect to a down PLC, it takes around 70 secods to actually get a timeout
from connect(). Using “alarm()” doesn’t stop the connect process either.

What I need to do is initiate a connection request and then come back and
periodically check if the socket becomes connected. If so, use it. If it
finally times out, know that.

So, I found that the following works:

  1. call socket()
  2. set the socket options to non-blocking.
  3. call connect()

Connect will either return with success, or failure. If it fails, certain
erros (like EINPROGRESS) mean that it’s trying, so don’t give up yet.

Then you can do other things, process other I/O, even do select() until the
specific socket shows ready to write.

If it shows ready to write, do
getsockopt (sock, SOL_SOCKET, SO_ERROR, &optval, &optlen);
if (optval == ETIMEDOUT)
{
/* socket finally timed out /
}
else
{
/
socket is connected and ready */
}

Good Luck!

Jeff.


“Hakim” <ddrv2002@yahoo.ca> wrote in message
news:dfnmbp$6li$1@inn.qnx.com

Hello,

Is there any way to set a timeout for ‘connect’ routine for TCP. I tried
on
receive timeout and that did not not work.
Or
If I set the socket non-blocking then how will I be able to find that
‘connect’ succeeds or times out by using select? I tried to set FD_SET on
read\write and I don’t get consistent result from select. What is the
usual
way to do this?

Thanks,
Hakim

begin 666 modtcp_comm.c
M+RHJBHJBHJBHJBHJBHJBHJBHJBHJBHJBHJBHJBHJBHJBHJ
MBHJBHJBHJBHJBHJBHJBHJBHJBHJBHJBHJ"@H);6]D=&-P7V-O
M;6TN8R M(&-O;6T@<W5B<F]U=&EN97,@=&@=&%L:R!M;V1B=7,@;W9E<B!T
M8W O:7 N"@H)2&ES=&]R>3H
"0DQ,B\Q-B\P,@EJ<V$)“4-R96%T960N”@D)
M,3(O,C8O,#():G-A"0EC;VYV97)T960@=&@<W5B<F]U=&EN92!O9B!M;V1T
M8W!?<&]L;“X*“0DP,B\R-R\P-0EJ<V$)“4UU8V@@8F5T=&5R(&AA;F1L:6YG
M(&]F(&-O;FYE8W0@<F5Q=65S=’,@=&@9&]W;B "0D)“0D)“5!,0W,N(”!!
M;’-O(&-H96-K<R!F;W(@=6YU<V5D(’-E<W-I;VYS(&%N9” "0D)"0D)"61I
M<V-O;FYE8W1S(&9R;VT@=&AE;2X
"BHJ
BHJBHJBHJBHJBHJBHJBHJ
MBHJBHJBHJBHJBHJBHJBHJBHJBHJBHJBHJBHJBHJBHJBHJ
M
BHJBHJBHJ+PH*(VEN8VQU9&4@/’-Y<V1E9BYH/@HC:6YC;'5D92 <WES
M+W-O8VME=“YH/@HC:6YC;'5D92 ;F5T:6YE=”]I;BYH/@HC:6YC;'5D92
M;F5T:6YE=”]T8W N:#X*(VEN8VQU9&4@/&YE=&1B+F@^“B-I;F-L=61E(#QS
M>7,O=6EO+F@^“B-I;F-L=61E(#QS>7,O=&EM92YH/@HC:6YC;'5D92 B+BXO
M;6]D:6-O;B]M;V1I8V]N7V1E9G,N:”("B-D969I;F4@1D1?4T544TE:12 Q
M,C@)+RH@;6%X:6UU;2!N=6UB97(@;V8@9F1S(&%V86EL86)L92!F;W(@<V5L
M96-T
"D@B*(VEN8VQU9&4@/’-Y<R]S96QE8W0N:#X(VEN8VQU9&4@/&EO
M8W1L+F@^“B-I;F-L=61E(#QE<G)N;RYH/@H*(V1E9FEN92!(3U-43D%-15]3
M25I%(#0P”@IS=’)U8W0@;6]D=&-P7W-E<W-I;VX*“7L*“6-H87():&]S=&YA
M;64@6TA/4U1.04U%7U-)6D5=.PH):6YT"0ES;V-K.PH)9F1?<V5T"7=R:71E
M7V9D<SL*“49,04<)<V]C:U]C;VYN96-T960[”@ET:6UE7W0)8V]N;F5C=%]T
M:6UE.PH)=&EM95]T"6QA<W1?;65S<V%G95]T:6UE.PH)=6EN=#$V"71N>%]I
M9#L)“2\J(‘1H92!L87-T(‘5S960@=’)A;G-A8W1I;VX@240[(&EN8W)E;65N
M=&5D(&5A8V@@=&YX(“HO”@EI;G0)"65R<F]R7V-O=6YT.PH)<W1R=6-T(&UO
M9’1C<%]S97-S:6]N("IN97AT.PH)?3L*“F5X=&5R;B!I;G0);6]D=&-P7W!O
M<G0[“2\J('1H92!P;W)T(”,@9F]R(&UO9&)U<R!T<F%N<V%C=&EO;G,@B*
M"G-T<G5C="!M;V1T8W!?<V5S<VEO;@DJ9FER<W1?<V5S<VEO;CU.54Q,+" J
M9G)E95]S97-S:6]N/4Y53$PL("IP<V5S<VEO;CL
@IV;VED(’-T;W)E7V9R
M965?<V5S<VEO;B H0H)>PH):68@’!S97-S:6]N+3YS;V-K(”$](“TQ0H)
M"7L
"0ES:‘5T9&]W;B H<’-E<W-I;VXM/G-O8VLL(#(I.PH)“6-L;W-E(“AP
M<V5S<VEO;BT^<V]C:RD[”@D)?0H)<’-E<W-I;VXM/G-O8VL@/2 M,3L*“7!S
M97-S:6]N+3YN97AT(#T@9G)E95]S97-S:6]N.PH)9G)E95]S97-S:6]N(#T@
M<’-E<W-I;VX[”@E](” OB!S=&]R95]F<F5E7W-E<W-I;VX@B*"@IV;VED
M(&-L;W-E7V-U<G)E;G1?<V5S<VEO;B H
0H)>PH)<W1R=6-T(&UO9’1C<%]S
M97-S:6]N("IP<RP@G!R979I;W5S7W!S.PH"7!R979I;W5S7W!S(#T@3E5,
M3#L
"7!S(#T@9FER<W1?<V5S<VEO;CL*”@EW:&EL92 H<’,@(3T@3E5,3"D*
M"0E"@D):68@*’!S(#T"0E[”@D)“6EF(“AP<F5V:6]U
M<U]P<R ]/2!.54Q,0H)“0D)9FER<W1?<V5S<VEO;B ](’!S+3YN97AT.PH)
M"0EE;’-E”@D)“0EP<F5V:6]U<U]P<RT^;F5X=” ](’!S+3YN97AT.PH)"0ES
M=&]R95]F<F5E7W-E<W-I;VX@
“D[”@D)“7)E=‘5R;CL*"0D)?0H)"7!R979I
M;W5S7W!S(#T@<’,[”@D)<’,@/2!P<RT^;F5X=#L*“0E]”@EM<V<@")M;V1T
M8W!?8V]M;3H@0V]U;&0@;F]T(&-L;W-E(&-U<G)E;G0@<V5S<VEO;B!<(B5S
M7"(N7&XB+"!P<V5S<VEO;BT^:&]S=&YA;64I.PH)?2 @+RH@8VQO<V5?8W5R
M<F5N=%]S97-S:6]N(“HO”@H
=F]I9”!C:&5C:U]F;W)?=6YU<V5D7VUO9’1C
M<%]S97-S:6]N<R H0H)>PH)=&EM95]T"6UY7W1I;64["@ES=’)U8W0@;6]D
M=&-P7W-E<W-I;VX@FYE>'1?<V5S<VEO;CL"@ET:6UE("@F;7E?=&EM92D[
M"@EP<V5S<VEO;B ](&9I<G-T7W-E<W-I;VX["@EW:&EL92 H<’-E<W-I;VX@
M(3T@3E5,3"D
"0E[”@D);F5X=%]S97-S:6]N(#T@<’-E<W-I;VXM/FYE>‘0[
M"2\J(&IU<W0@:6X@8V%S92!W92!C;&]S92!T:&ES(’-E<W-I;VX@B*“0EI
M9B H<’-E<W-I;VXM/FQA<W1?;65S<V%G95]T:6UE(#P@;7E?=&EM92 M(#<R
M,# I(”\J(&YO="!U<V5D(&EN(#(@:&]U<G,@B*“0D)8VQO<V5?8W5R<F5N
M=%]S97-S:6]N(”@I.PH)"7!S97-S:6]N(#T@;F5X=%]S97-S:6]N.PH)"7T

M"7T@("\J(&-H96-K7V9O<E]U;G5S961?;6]D=&-P7W-E<W-I;VYS(“HO”@H

M=F]I9”!S971?<V]C:V5T7V]P=&EO;G,@&EN="!S;V-K0H)>PH):6YT"6]P
M='9A;” ](#$[”@ES=’)U8W0@=&EM979A;”!T.PH*“6EF(“AS971S;V-K;W!T
M(“AS;V-K+”!G971P<F]T;V)Y;F%M92 H(E1#4”(I+3YP7W!R;W1O+”!40U!?
M3D]$14Q!62P@"@D)“29O<‘1V86PL(’-I>F5O9B H;W!T=F%L2D@/" P0H)
M"6US9R H(FUO9’1C<#H@1F%I;&5D(‘1O(’-E=”!O<‘1I;VX@5$-07TY/1$5,
M05DN7&XB3L"B\J"@EI9B H<V5T<V]C:V]P=" H<V]C:RP@4T],7U-/0TM%
M5"P@4T]?4D554T5!1$12+" "0D))F]P='9A;"P@<VEZ96]F("AO<'1V86PI
M
2 (# I"@D);7-G("@B;6]D=&-P.B!&86EL960@=&@<V5T(&]P=&EO;B!3
M3U]2155314%$1%(N7&XB3L**B*"@EI9B H<V5T<V]C:V]P=" H<V]C:RP@
M4T],7U-/0TM%5"P@4T]?2T5%4$%,259%+" "0D))F]P='9A;"P@<VEZ96]F
M("AO<'1V86PI
2 (# I"@D);7-G("@B;6]D=&-P.B!&86EL960@=&@<V5T
M(&]P=&EO;B!33U]+145004Q)5D4N7&XB
3L*"@ET+G1V7W-E8R ](#(["@ET
M+G1V7W5S96,@/2 P.PH*"6EF(“AS971S;V-K;W!T(“AS;V-K+”!33TQ?4T]#
M2T54+”!33U]33D1424U%3RP@)G0L(’-I>F5O9B H=“DI(#P@,“D*“0EM<V<@
M*”)M;V1T8W Z($9A:6QE9”!T;R!S970@;W!T:6]N(%-/7U-.1%1)345/+EQN
M(BD[”@H):68@’-E=’-O8VMO<'0@’-O8VLL(%-/3%]33T-+150L(%-/7U)#
M5E1)345/+" F=“P@<VEZ96]F(“AT2D@/" P0H)“6US9R H(FUO9’1C<#H@
M1F%I;&5D(‘1O(’-E=”!O<'1I;VX@4T]?4D-65$E-14\N7&XB3L"7T@(”\J
M(’-E=%]S;V-K7V]P=&EO;G,@B*"@IV;VED(’-E=%]S;V-K971?;F]N8FQO
M8VMI;F<@
$9,04<@;F]N8FQO8VMI;F<I”@E["@EI9B H:6]C=&P@’!S97-S
M:6]N+3YS;V-K+"!&24].0DE/+" F;F]N8FQO8VMI;F<I(#P@,"D
"0EM<V<@
M*")M;V1T8W Z($9A:6QE9"!T;R!S970@<V]C:V5T(‘1O(“5S8FQO8VMI;F=<
M;B(L( H)“0D);F]N8FQO8VMI;F<@/R B;F]N+2(@.B B(BD[”@E](” OB!S
M971?<V]C:V5T7VYO;F)L;V-K:6YG(“HO”@H
1DQ!1R!F:6YD7W-E<W-I;VX@
M*&-H87(@FAO<W1N86UE+"!&3$%’(&-R96%T95]N97<I"@E["@ES=’)U8W0@
M<V]C:V%D9’)?:6X@<V5R=F5R.PH)<W1R=6-T(&AO<W1E;G0@FAP.PH"6EF
M("AS=’)L96X@
&AO<W1N86UE2 ^/2!(3U-43D%-15]325I%0D)+RH@:&]S
M=&YA;64@;75S="!B92!T97)M:6YA=&5D(“HO”@D)<F5T=7)N($9!3%-%.PH)
M:68@
’-T<FQE;B H:&]S=&YA;64I(#T](# I"@D)<F5T=7)N($9!3%-%.PH

M"7!S97-S:6]N(#T@9FER<W1?<V5S<VEO;CL*“7=H:6QE(”@H<’-E<W-I;VX@
M(3T@3E5,3"D@)B8@’-T<F-M<" H:&]S=&YA;64L(’!S97-S:6]N+3YH;W-T
M;F%M92D@(3T@,"D@0H)“7!S97-S:6]N(#T@<’-E<W-I;VXM/FYE>'0[”@EI
M9B H<’-E<W-I;VX@(3T@3E5,3"D
"0ER971U<FX@
%12544I.PH):68@"%C
M<F5A=&5?;F5W
0H)“7)E=‘5R;B H1D%,4T4I.PH*"2\J($9I;F0@;W(@9V5T
M(&$@9G)E92!S97-S:6]N(’-T<G5C='5R92!T;R!U<V4@9F]R(‘1H:7,@;F5W
M(’-E<W-I;VX@B*"6EF("AF<F5E7W-E<W-I;VX@/3T@3E5,3"D"0E[”@D)
M:68@" H<’-E<W-I;VX@/2!M86QL;V,@’-I>F5O9B H<W1R=6-T(&UO9’1C
M<%]S97-S:6]N2DI(#T]($Y53$PI"@D)"7L"0D);7-G("@B;6]D=&-P.B!U
M;F%B;&4@=&@86QL;V-A=&4@<W1R=6-T=7)E(&UO9’1C<%]S97-S:6]N+EQN
M(BD["@D)“7)E=‘5R;B H1D%,4T4I.PH)“0E]”@D)?0H)96QS90H)"7L*"0EP
M<V5S<VEO;B ](&9R965?<V5S<VEO;CL*"0EF<F5E7W-E<W-I;VX@/2!P<V5S
M<VEO;BT^;F5X=#L*“0E]”@H);65M<V5T("AP<V5S<VEO;BP@,"P@<VEZ96]F
M("AS=’)U8W0@;6]D=&-P7W-E<W-I;VXI3L"7-T2 H<’-E<W-I;VXM
M/FAO<W1N86UE+”!H;W-T;F%M92D[“0H)<’-E<W-I;VXM/G-O8VL@/2 M,3L*
M"71I;64@"9P<V5S<VEO;BT^;&%S=%]M97-S86=E7W1I;64I.PDOB!$;VXG
M=”!D:7-C87)D(’-E<W-I;VX@FEG:'0@87=A2 J+PH)<’-E<W-I;VXM/FYE
M>‘0@/2!.54Q,.PH*"2\J($QI;FL@=&AE(’-E<W-I;VX@<F5C;W)D(&EN=&@
M=&AE(’-E<W-I;VYS(&QI<W0@B*"7!S97-S:6]N+3YN97AT(#T@9FER<W1?
M<V5S<VEO;CL
"69I<G-T7W-E<W-I;VX@/2!P<V5S<VEO;CL*"@DOB!.;W<@
M8W)E871E('1H92!S;V-K970@=&@=&AE(&UO9&)U<R!S97)V97(@B*“6EF
M(”@H<’-E<W-I;VXM/G-O8VL@/2!S;V-K970@
$%&7TE.150L(%-/0TM?4U12
M14%-+" P
2D@/" P0H)"7L"0EM<V<@")M;V1T8W Z($5R<F]R(&-R96%T
M:6YG(&YE=R!S97-S:6]N(’-O8VME="Y<;B(I.PH)"6-L;W-E7V-U<G)E;G1?
M<V5S<VEO;B H
3L*“0ER971U<FX@$9!3%-%3L"0E]"@H)+RH@;6]D:69Y
M(&-E<G1A:6X@<V]C:V5T(&]P=&EO;G,@9F]R(‘1C<"]M;V1B=7,@B*“7-E
M=%]S;V-K971?;W!T:6]N<R H<’-E<W-I;VXM/G-O8VLI.PH)<V5T7W-O8VME
M=%]N;VYB;&]C:VEN9R H5%)512D[“2\J(’-E=”!T;R!N;VXM8FQO8VMI;F<@
M9F]R(&-O;FYE8W0@B*“49$7U-%5” @’!S97-S:6]N+3YS;V-K+” F<’-E
M<W-I;VXM/G=R:71E7V9D<RD[“2\J(’-E=”!U<"!F;W(@<V5L96-T
"D@B*
M"7!S97-S:6]N+3YS;V-K7V-O;FYE8W1E9" ]($9!3%-%.PH
"2\J($EN:71I
M871E(&$@8V]N;F5C=&EO;B!T;R!T:&4@4$Q#(“HO”@ET:6UE("@F<’-E<W-I
M;VXM/F-O;FYE8W1?=&EM92D["@H)+RH@;&]O:RUU<"!R97%U97-T960@:&]S
M=&YA;64@B*"7-E<G9E<BYS:6Y?9F%M:6QY(#T@049?24Y%5#L"6EF("@@
M
&AP(#T@9V5T:&]S=&)Y;F%M92 H:&]S=&YA;64I2 ]/2 P0H)“7L*“0EI
M9B H5D520D]312D*“0D);7-G(”@B;6]D=&-P.B!5;FMN;W=N(&AO<W1N86UE
M(%PB)7-<(EQN(BP@:&]S=&YA;64I.PH)“7)E=‘5R;B H1D%,4T4I.PH)"7T*
M"6UE;6-P>2 H)G-E<G9E<BYS:6Y?861D<BP@:’ M/FA?861D<BP@:’ M/FA?
M;&5N9W1H3L"7-E<G9E<BYS:6Y?<&]R=” ](&AT;VYS(“AM;V1T8W!?<&]R
M=“D[”@H):68@%9%4D)/4T4I"@D);7-G("@B;6]D=&-P.B!/<&5N:6YG(&$@
M;F5W(&-O;FYE8W1I;VX@=&@:&]S="!<(B5S7")<;B(L(&AO<W1N86UE
3L*
M”@EI9B H8V]N;F5C=” H<’-E<W-I;VXM/G-O8VLL(“AS=’)U8W0@<V]C:V%D
M9’(@BD@)G-E<G9E<BP@<VEZ96]F("AS97)V97(I2 A/2 M,2D*“0ER971U
M<FX@5%)513L)+RH@<’)E;&EM:6YA<GD@<W5C8V5S<R J+PH*“2\J(&-H96-K
M(&9O<B B86-C97!T86)L92(@97)R;W)S+B J+PH)<W=I=&-H(“AE<G)N;RD*
M"0E[”@D)8V%S92!%04Q214%$63H)“2\J($$@<’)E=FEO=7,@8V]N;F5C=&EO
M;B!A='1E;7!T(&AA<VXG=”!C;VUP;&5T960@B*"0EC87-E($5)3E!23T=2
M15-3.@DO
B!4:&4@8V]N;F5C=&EO;B!C86XG=”!B92!C;VUP;&5T960@:6UM
M961I871E;‘D@B*"0EC87-E($5)4T-/3DXZ"0DOB!!;’)E861Y(&-O;FYE
M8W1E9” J+PH)“0ER971U<FX@5%)513L*“0E]”@H)+RH@(G5N86-C97!T86)L
M92!E<G)O<G,Z(“HO”@EI9B H5D520D]312D*“0EM<V<@")M;V1T8W Z($5R
M<F]R("5D(&-O;FYE8W1I;F<@=&@<V5R=F5R(%PB)7,Z)61<(BY<;B(L( H)
M"0D)"0EE<G)N;RP@:&]S=&YA;64L(&UO9’1C<%]P;W)T
3L*“6-L;W-E7V-U
M<G)E;G1?<V5S<VEO;B H3L"7)E='5R;B!&04Q313L*“7T@(”\J(&9I;F1?
M<V5S<VEO;B J+PH*“D9,04<@<V]C:V5T7W)E861Y7V9O<E]W<FET92 H:6YT
M('1I;65O=70I”@E[”@ES=’)U8W0@=&EM979A;”!T=CL*”@ET=BYT=E]S96,@
M/2!T:6UE;W5T.PH)='8N='9?=7-E8R ](# [”@ER971U<FX@’-E;&5C=" H
M,2LH<’-E<W-I;VXM/G-O8VLI+"!.54Q,+" F<’-E<W-I;VXM/G=R:71E7V9D
M<RP@3E5,3"P@)G1V
2 ^(# I.PH)?2 @+RH@<V]C:V5T7W)E861Y7V9O<E]W
M<FET92 J+PH*“D9,04<@=F5R:69Y7W-O8VM?8V]N;F5C=&EO;B H0H)>PH)
M=&EM95]T"6UY7W1I;64["@H)+RH@8VAE8VL@=&@<V5E(&EF(‘1H92!C;VYN
M96-T:6]N(&ES(’)E861Y(“HO”@EI9B H<V]C:V5T7W)E861Y7V9O<E]W<FET
M92 H,2DI"2\J(&%L;&]W(‘5P(‘1O(#$@<V5C;VYD(&9O<B!S;V-K970@=&@
M8F4@<F5A9’D@B*“0E[”@D)+RH@4V]C:V5T(&ES(’)E861Y(“HO”@D):68@
M
"%P<V5S<VEO;BT^<V]C:U]C;VYN96-T960I"2\J(’-O8VME="!W87-N)W0@
M<’)E=FEO=7-L>2!C;VYN96-T960@B*"0D)>PH)"0EI;G0)"6]P='9A;#L
M"0D)<VEZ95]T"6]P=&QE;CL
@D)“6]P=&QE;B ](’-I>F5O9B H;W!T=F%L
M3L"0D)9V5T<V]C:V]P=” H<’-E<W-I;VXM/G-O8VLL(%-/3%]33T-+150L
M(%-/7T524D]2+” F;W!T=F%L+” F;W!T;&5N3L"@D)“6EF(“AO<'1V86P@
M/3T@151)345$3U540H)"0D)>PH)"0D):68@%9%4D)/4T4I”@D)“0D);7-G
M(”@B;6]D=&-P.B!#;VYN96-T:6]N(‘1O(’-E<G9E<B!<(B5S.B5D7”(@=&EM
M960@;W5T+EQN(BP@"@D)“0D)“0EP<V5S<VEO;BT^:&]S=&YA;64L(&UO9’1C
M<%]P;W)T3L"0D)“6-L;W-E7V-U<G)E;G1?<V5S<VEO;B H3L"0D)“7)E
M=‘5R;B!&04Q313L*“0D)“7T*“0D)<V5T7W-O8VME=%]N;VYB;&]C:VEN9R H
M1D%,4T4I.R OB!S;V-K970@;F]W(&)L;V-K:6YG(&9O<B!R96%D+W=R:71E
M(“HO”@D)“7!S97-S:6]N+3YS;V-K7V-O;FYE8W1E9” ](%12544["@D)"7T

M"0ER971U<FX@5%)513L*“0E]”@H)+RH@4V]C:V5T(&ES($Y/5”!R96%D>2 J
M+PH):68@’!S97-S:6]N+3YS;V-K7V-O;FYE8W1E9"D"0DOB!S;V-K970@
M=V%S(’!R979I;W5S;'D@8V]N;F5C=&5D(“HO”@D)>PH)"6EF("A615)"3U-%
M
0H)“0EM<V<@")3;V-K970@=&@)7,@;F@;&]N9V5R(’)E861Y(&9O<B!W
M<FET93L@9&ES8V]N;F5C=&EN9UQN(BP@"@D)"0EP<V5S<VEO;BT^:&]S=&YA
M;64I.PH)"6-L;W-E7V-U<G)E;G1?<V5S<VEO;B H
3L*“0ER971U<FX@$9!
M3%-%3L"0E]"@H)+RH@4V]C:V5T(&AA<VXG="!C;VYN96-T960@>65T+B @
M5V%I="!U<"!T;R Y,"!S96-O;F1S('1O(&-O;7!L971E(&-O;FYE8W1I;VXN
M"@D)44Y8(%1#4"])4"!S965M<R!T;R!A;&QO=R!U<"!T;R W,"!S96-O;F1S
M(“AV-2XP+” P,B\R,# U
2!B969O<F4@”@D)=&EM:6YG(&]U=“P@<V@9VEV
M92!I=”!A=”!L96%S=”!T:&%T(&QO;F<N”@DJ+PH)=&EM92 H)FUY7W1I;64I
M.PH):68@&UY7W1I;64@/B!P<V5S<VEO;BT^8V]N;F5C=%]T:6UE(“L@.3 I
M”@D)>PH)“6EF(“A615)“3U-%0H)"0EM<V<@”)M;V1T8W Z($9A:6QE9”!T
M;R!C;VYN96-T(‘1O(’-E<G9E<B!<(B5S.B5D7”(N7&XB+" “0D)“0D)<’-E
M<W-I;VXM/FAO<W1N86UE+”!M;V1T8W!?<&]R=“D[”@D)8VQO<V5?8W5R<F5N
M=%]S97-S:6]N(”@I.PH)"7)E='5R;B H1D%,4T4I.PH)"7T
"@EI9B H5D52
M0D]312D
"0EI9B H;7E?=&EM92 ^(’!S97-S:6]N+3YL87-T7VUE<W-A9V5?
M=&EM92 K(#4I@D)“7L*“0D);7-G(”@B;6]D=&-P.B!786ET:6YG(&9O<B!C
M;VYN96-T:6]N(‘1O(’-E<G9E<B!<(B5S.B5D7”(N7&XB+” "0D)“0D)<’-E
M<W-I;VXM/FAO<W1N86UE+”!M;V1T8W!?<&]R=“D[”@D)“7!S97-S:6]N+3YL
M87-T7VUE<W-A9V5?=&EM92 ](&UY7W1I;64[”@D)"7T
"7)E=‘5R;B H1D%,
M4T4I.PH)?2 @+RH@=F5R:69Y7W-O8VM?8V]N;F5C=&EO;B J+PH*"D9,04<@
M=’)A;G-A8W1?;6]D=&-P7VUE<W-A9V4@&-H87(@FAO<W1N86UE+" "0D)
M"0D)“0E"651%(“IT>%]M97-S86=E+”!I;G0@='A?8V]U;G0L”@D)"0D)"0D)
M0EE412 J<GA?;65S<V%G92P@:6YT("IR>%]C;W5N="D
"7L
"7-T<G5C=" *
M"0E["@D)=6EN=#$V"71N>%]I9#L)"0DO
B!T:&ES(&ES(&QI='1L92!E;F1I
M86X@9F]R;6%T.R!P<F]T;V-O;”!S:&]U;&1N)W0@8V%R92 J+PH)“75I;G0Q
M-@EP<F]T;V-O;%]I9#L)+RH@9&ET=&[(&)U=”!V86QU92!I<R!Z97)O+”!S
M;R!W:&@8V%R97,A(“HO”@D)0EE410EL96YG=&A?:&EG:“P@;&5N9W1H7VQO
M=SL*“0E](&UO9’1C<%]H96%D97([”@ES=’)U8W0@:6]V96,@<&%R=’,@6S)=
M.PH):6YT(&EO7V)Y=&5S.PH*“6EF(”@A9FEN9%]S97-S:6]N(“AH;W-T;F%M
M92P@5%)512DI”@D)>PH)“6EF(“A615)“3U-%0H)"0EM<V<@”)M;V1T8W Z
M(%5N86)L92!T;R!F:6YD+V-R96%T92!S;V-K970@=&@:&]S=”!<(B5S7”(N
M7&XB+”!H;W-T;F%M92D["@D)<F5T=7)N($9!3%-%.PH)“7T*”@EI9B H(79E
M5]S;V-K7V-O;FYE8W1I;VX@“DI”@D)>PH)"6EF("A615)“3U-%0H)
M"0EM<V<@
”).;W0@8V]N;F5C=&5D.R B
3L*“0ER971U<FX@$9!3%-%3L
M"0E]"@H)+RH@26YI=&EA=&4@82!T<F%N<V%C=&EO;B!T;R!T:&4@<F5Q=65S
M=&5D(&AO<W0@B*"6UO9’1C<%]H96%D97(N=&YX7VED(#T@RMP<V5S<VEO
M;BT^=&YX7VED.PH);6]D=&-P7VAE861E<BYP<F]T;V-O;%]I9" ](# [("\J
M($U/1$)54R!P<F]T;V-O;" J+PH);6]D=&-P7VAE861E<BYL96YG=&A?:&EG
M:" ](# ["@EM;V1T8W!?:&5A9&5R+FQE;F=T:%]L;W<@(#T@=‘A?8V]U;G0[
M"@H)<&%R=’,@6S!=+FEO=E]B87-E(#T@
&-A9&1R7W0I("9M;V1T8W!?:&5A
M9&5R.PH)<&%R=’,@6S!=+FEO=E]L96X@(#T@<VEZ96]F("AM;V1T8W!?:&5A
M9&5R
3L
"7!A<G1S(%LQ72YI;W9?8F%S92 ]('1X7VUE<W-A9V4[”@EP87)T
M<R!;,5TN:6]V7VQE;B @/2!T>%]C;W5N=#L*"@EI;U]B>71E<R ](# ["@EE
M<G)N;R ](# ["@EI;U]B>71E<R ](’=R:71E=B H<’-E<W-I;VXM/G-O8VLL
M(’!A<G1S+" R3L"6EF(“AI;U]B>71E<R A/2 H='A?8V]U;G0@R!S:7IE
M;V8@
&UO9’1C<%]H96%D97(I2D"0E[”@D):68@%9%4D)/4T4I"@D)“6US
M9R H(FUO9’1C<#H@17)R;W(@=W)I=&EN9R!D871A('1O(&AO<W0@7”(E<UPB
M+EQN(BP@:&]S=&YA;64I.PH)“6EF(”@K
W!S97-S:6]N+3YE<G)O<E]C;W5N
M=" ^(#4I"@D)“6-L;W-E7V-U<G)E;G1?<V5S<VEO;B H3L"0ER971U<FX@
M1D%,4T4"@D)?0H*"7!A<G1S(%LQ72YI;W9?8F%S92 X7VUE<W-A9V4[
M”@EP87)T<R!;,5TN:6]V7VQE;B @/2 R-38["@EF;W(@#L[0H)"7L"0EI
M;U]B>71E<R ](# ["@D):6]?8GET97,@/2!R96%D=B H<’-E<W-I;VXM/G-O
M8VLL(’!A<G1S+" R
3L*"0EI9B H:6]?8GET97,@/#T@,"D*"0D)>PH)"0EI
M9B HRMP<V5S<VEO;BT^97)R;W)?8V]U;G0@/B Q,"D"0D)"6-L;W-E7V-U
M<G)E;G1?<V5S<VEO;B H3L"0D)<F5T=7)N(“A&04Q312D[”@D)"7T*“0EI
M9B H;6]D=&-P7VAE861E<BYT;GA?:60@(3T@<’-E<W-I;VXM/G1N>%]I9"D*
M"0D)8V]N=&EN=64[”@D):68@&EO7V)Y=&5S("$]("AM;V1T8W!?:&5A9&5R
M+FQE;F=T:%]L;W<@R!S:7IE;V8@&UO9’1C<%]H96%D97(I
2D*“0D)8V]N
M=&EN=64[”@D)G)X7V-O=6YT(#T@;6]D=&-P7VAE861E<BYL96YG=&A?;&]W
M.PH
"0EP<V5S<VEO;BT^97)R;W)?8V]U;G0@/2 P.PH)"71I;64@*“9P<V5S
M<VEO;BT^;&%S=%]M97-S86=E7W1I;64I.PH)“7)E='5R;B H5%)512D[”@D)
E?0H)?2 @+RH@=’)A;G-A8W1?;6]D=&-P7VUE<W-A9V4@*B*”@``
`
end

Thanks a zillion. I was thinking of some nasty workaround, yours is clean
approach.

Hakim

“Jeffrey Adler” <jeffadler.at.bigfoot.dot.com@nowhere.com> wrote in message
news:dfq5i4$2sg$1@inn.qnx.com

Attached is a module that I used to do just that. (You may need to filter
thru the fluff, but the meat is certainly there). See the routine called
“find_session()”.

In my case, I have a program that talks to many PLCs. Each PLC uses a
separate connection or “session”. Like you, I found that if I try to
connect to a down PLC, it takes around 70 secods to actually get a timeout
from connect(). Using “alarm()” doesn’t stop the connect process either.

What I need to do is initiate a connection request and then come back and
periodically check if the socket becomes connected. If so, use it. If it
finally times out, know that.

So, I found that the following works:

  1. call socket()
  2. set the socket options to non-blocking.
  3. call connect()

Connect will either return with success, or failure. If it fails, certain
erros (like EINPROGRESS) mean that it’s trying, so don’t give up yet.

Then you can do other things, process other I/O, even do select() until
the specific socket shows ready to write.

If it shows ready to write, do
getsockopt (sock, SOL_SOCKET, SO_ERROR, &optval, &optlen);
if (optval == ETIMEDOUT)
{
/* socket finally timed out /
}
else
{
/
socket is connected and ready */
}

Good Luck!

Jeff.


“Hakim” <> ddrv2002@yahoo.ca> > wrote in message
news:dfnmbp$6li$> 1@inn.qnx.com> …
Hello,

Is there any way to set a timeout for ‘connect’ routine for TCP. I tried
on
receive timeout and that did not not work.
Or
If I set the socket non-blocking then how will I be able to find that
‘connect’ succeeds or times out by using select? I tried to set FD_SET on
read\write and I don’t get consistent result from select. What is the
usual
way to do this?

Thanks,
Hakim

\