resource manager time outs

I have a real simple resource manager that reads and returns a string from a
device on a terminal server. The device may be non-functional at times and
I need to terminate the thread after 60 Sec or so and return an error to the
client. I am not sure how to do that. I have attached a copy of the server
code.

Thanks in advance.

→ it can be done ←

<jsanders@radix.net>


begin 666 thRmgr.c
M+RH@82!T8W O:7 @8VQI96YT(‘1O(&=E="!A;F0@<F5P;W)T(‘1E;7 @86YD
M(&AU;6ED(’)E861I;F=S("HO#0H-"B-I;F-L=61E(#QS>7,O9FEL92YH/@DO
MB!U;FEX(&9L86=S(&%N9"!M;V1E(&1E9FEN:71I;VYS(“T@(&UA:V4@8V]N
M<VES=&%N=” J+PT
(VEN8VQU9&4@/’-T9&EO+F@^#0HC:6YC;‘5D92 <W1D
M;&EB+F@^#0HC:6YC;‘5D92 <VEG;F%L+F@^#0HC:6YC;‘5D92 ;F5T9&(N
M:#X-"B-I;F-L=61E(#QC=‘EP92YH/@T*(VEN8VQU9&4@/&%R<&$O:6YE="YH
M/@T*(VEN8VQU9&4@/’-Y<R]U:6\N:#X-"B-I;F-L=61E(#QS>7,O<&%R86TN
M:#X-"B-I;F-L=61E(#QS>7,O<W1A="YH/@T*(VEN8VQU9&4@/’-Y<R]S;V-K
M970N:#X-“B-I;F-L=61E(”)T:%)M9W(N:"(-"@T*(V1E9FEN92!J97)R;W(H
M<W,L:6DI(‘MP97)R;W(H(F5R<F]R(“TB3MP<FEN=&8H(B5S("T@)61<;B(L
M<W,L:6DI.R!<#0H@($US9U)E<&QY
”!C=’ M/G)C=FED+"!%24\L(# L(# @
M3L@<F5T=7)N(# [?0T(V1E9FEN92!5"AS<RD@<’)I;G1F")T:%)M9W(@
M+2 E<UQN(BQS<RD[#0H-"@T*:6YT(&UE<W-A9V5?8V%L;&)A8VLH(&UE<W-A
M9V5?8V]N=&5X=%]T("IC=’ L(&EN="!T>7!E+"!U;G-I9VYE9"!F;&%G<RP-
M"B @(" @(" @(" @(" @(" @(" @("!V;VED(“IH86YD;&4@0T>PT*(”!S
M=&%T:6,@<W1R=6-T(’-O8VMA9&1R7VEN(’-I;CL-"@T*(" @(’-T<G5C="!S
M97)V96YT(“IS<#L-“B @(”!S=’)U8W0@:&]S=&5N=” J:’ [#0H@(" @8VAA
M<B J:G-N+“IJ<FX[“2\J(’-E<G9I8V4@86YD(’-E<G9E<B!N86UE<R J+PT*
M(” @(&EN=”!S9F0L<F,L:2QC;G0[#0H@(" @8VAA<B!B=69;,3 R-%T[#0H@
M(" @8VAA<B!T96UP6S,R72QH=6UI9%LS,ETLG1O:RPJ;&%S=’,[#0H@(" @
M8VAA<B!T97)M6UT](B O="]R+VXO,# P(CL-“B @(”!R;6=R7VUS9U]T(“IM
M<V<[#0H@(” @#0H-"@T
("!J<VX@/2 B=&5M<$AU;6ED(CL-“B @:G)N(#T@
M(FQA;G1R;VYI>”([#0H@(&%L87)M*#8P3L-"@T(" @(&EF*"$H<W @/2!G
M971S97)V8GEN86UE*&IS;BPB=&-P(BDI7L-“B @(” @(&9P<FEN=&8H<W1D
M97)R+"(E<UQN(BQJ<VXI.PT
(" @(" @:F5R<F]R*")J9G,Z(‘1C<"]J9G,Z
M(‘5N:VYO=VX@<V5R=FEC92(L,“D[#0H@(” @?0T*(" @(&EF*"$H:’ @/2!G
M971H;W-T8GEN86UE*&IR;BDI7L-“B @(” @(&9P<FEN=&8H<W1D97)R+"(E
M<UQN(BQJ<FXI.PT
(" @(" @:F5R<F]R*")J9G,Z("!U;FMN;W=N(&AO<W0B
M+# I.PT*(" @(‘T-“B @(”!B>F5R;R@H8VAA<B J29S:6XL(’-I>F5O9BAS
M:6XI
3L-“B @(”!B8V]P>2AH<“T^:%]A9&1R+” H8VAA<B J29S:6XN<VEN
M7V%D9’(L(&AP+3YH7VQE;F=T:“D[#0H@(” @<VEN+G-I;E]F86UI;'D@/2!H
M<"T^:%]A9&1R='EP93L-“B @(”!S:6XN<VEN7W!O<G0@/2!S<"T^<U]P;W)T
M.PT
(" -"B @:68H*’-F9" ](’-O8VME=“A!1E])3D54+”!33T-+7U-44D5!
M32P@,“DI(#P@,“E[#0H@(” @:F5R<F]R*”)J9G,Z(’-O8VME=#HB+# I.PT*
M("!]#0H@("\O($I4*")D:60@<V]C:V5T(BD[#0H@(&EF*“AR8SUC;VYN96-T
M*’-F9"P@'9O:60@BDF<VEN+"!S:7IE;V8H<VEN2DI(#P@,“E[#0H@(” @
M:F5R<F]R
”)J9G,Z(&-O;FYE8W0Z(BQR8RD[#0H@(‘T-“B @+R@2E0H(F1I
M9”!C;VYN96-T(BD[#0H@(’-E;F0H<V9D+")S96YD(# P7’)<;B(L.2PP3L-
M"B @+R@2E0H(G-E;G0@<V5N9" P,"(I.PT
(" O+R!S;&5E<"@R3L-"B @
M:2 ]("TQ.PT
("!C;G0],#L-“B @=VAI;&4H:3PP('Q(&)U9EMI72$])UQN
M)RE[#0H@(” @:6YT(&L@/2!R96-V*’-F9"QB=68K*&DK,2DL<VEZ96]F*&)U
M9BDL,“D[#0H@(” @:68H:SPQ7L-“B @(” @("!J97)R;W(H(D)A9"!R96%D
M('1M<"(L,“D[#0H@(” @?0T
(" @(&DK/6L[#0H@(" @8VYTRL[#0H@('T-
M"B @#0H@(&EF
&D^/3 I(&)U9EMIS%=/3 [#0H@("\O(&=O="!A('1E;7 @
M:'5M:60@<F5A9&EN9PT
(VEF(# -"@T*(" O+R!P<FEN=&8H(F=O=" E9"!T
M<FEE<R E9"!C:&%R<SH@)7-<;B(L8VYT+’-T<FQE;BAB=68I+&)U9BD[#0H@
M("\J(’!A<G-E(‘1H92!H=6UI9"!A;F0@=&5M<"!O=70@;V8@=&AE(’)E=‘5R
M;F5D(’-T<FEN9R J+PT*(" J:‘5M:60],#L-“B @G1E;7 ],#L-"B @9&@
M>PT
(” @(‘1O:SUS=’)T;VM?<BAB=68L=&5R;2PF;&%S=’,I.PT*(" @(‘1O
M:SUS=’)T;VM?<BA.54Q,+‘1E<FTL)FQA<W1S3L-“B @(”!I9B@A=&]K0T*
M(" @(" @8G)E86L[#0H@(" @<W1R8W!Y*&AU;6ED+‘1O:RD[#0H@(" @=&]K
M/7-T<G1O:U]R*$Y53$PL=&5R;2PF;&%S=’,I.PT*(" @(‘1O:SUS=’)T;VM?
M<BA.54Q,+‘1E<FTL)FQA<W1S3L-“B @(”!T;VL]<W1R=&]K7W(H3E5,3"QT
M97)M+“9L87-T<RD[#0H@(” @:68H(71O:RD-“B @(” @(&)R96%K.PT
(" @
M(’-T2AT96UP+‘1O:RD[#0H@(" @<’)I;G1F*")T96UP("5S(&AU;6ED
M(“5S7&XB+'1E;7 L:'5M:60I.PT*(”!](’=H:6QE("@P3L-"B-E;F1I9@T
M#0H@("\J(&-L;W-E(&1O=VX@8V]N;F5C=&EO;B!A;F0@<V]C:V5T(“HO#0H@
M(&EF*“AR8SUC;&]S92AS9F0I2E[#0H@(" @:F5R<F]R”)3;V-K970@8VQO
M<V4@9F%I;&5D(BQR8RD[#0H@('T-“B @37-G4F5P;‘DH(&-T<“T^<F-V:60L
M($5/2RP@8G5F+”!S=’)L96XH(&)U9B I(“L@,2 I.PT*(”!A;&%R;2@P3L-
M"B @<F5T=7)N(# [#0H-“GT-”@T
#0II;G0@;6%I;B@@:6YT(&%R9V,L(&-H
M87(@BIA<F=V(“D-“GL-“B @(”!R97-M9W)?871T<E]T(” @(” @("!R97-M
M9W)?871T<CL-“B @(”!M97-S86=E7V%T=’)?=" @(" @("!M97-S86=E7V%T
M=’([#0H@(" @9&ES<&%T8VA?=" @(" @(" @(" @F1P<#L-“B @(”!D:7-P
M871C:%]C;VYT97AT7W0@(" J8W1P+" J8W1P7W)E=#L-“B @(”!I;G0@(" @
M(" @(" @(" @(" @("!R97-M9W)?:60L(&UE<W-A9V5?:60[#0H-"B-I9F1E
M9B!$14%-3TX-“B @:6YT(&5F9#L-”@T
("!I9B@A
&5F9” ](&9O<&5N*”(O
M=&UP+W1E;7!(=6UI9"YL;V<B+")AR(I2E[#0H@(" @<&5R<F]R*")T96UP
M2’5M;V0@;&]G(&9I;&4@;W!E;B!E<G)O<B(I.PT*(" @(&5X:70H,2D[#0H@
M(‘T-"@T*#0H@(&1U<#(H9FEL96YO*&5F9"DL(&9I;&5N;RAS=&1O=70I3L@
M(" @+RH@<F5P;&%C92!T:&4@;F]R;6%L(’-T86YD87)D(&]U=’!U=" J+PT

M("!D=7 R*&9I;&5N;RAE9F0I+"!F:6QE;F\H<W1D97)R2D[(" @("\J(’)E
M<&QA8V4@=&AE(&YO<FUA;"!S=&%N9&%R9"!E<G)O<B J+PT
#0H@("\J(&1I
M<V%S<VEO871E(&9R;VT@8V]N=’)O;&QI;F<@=&5R;6EN86P@B-"@T("!I
M9BAP<F]C;6=R7V1A96UO;BA%6$E47U-50T-%4U,L4%)/0TU’4E]$045-3TY?
M3D]#3$]317Q04D]#34=27T1!14U/3E].3T1%5DY53$PI(#P@,“E[#0H@(” @
M<&5R<F]R*")“860@9&ES8V]N;F5C=”!F<F]M(‘1T>2(I.PT*("!]#0H-“B-E
M;F1I9B @(” -"@T*(" @("\J($-R96%T92!T:&4@1&ES<&%T8V@@26YT97)F
M86-E(“HO#0H@(” @9’!P(#T@9&ES<&%T8VA?8W)E871E*“D[#0H@(” @:68H
M(&1P<" ]/2!.54Q,(“D-“B @(”![#0H@(” @(" @(&9P<FEN=&8H(’-T9&5R
M<BP@(F1I<W!A=&-H7V-R96%T92@I(&9A:6QE9#H@)7-<;B(L#0H@(" @(" @
M(" @(" @(" @(’-T<F5R<F]R*"!E<G)N;R I(“D[#0H@(” @(" @(’)E=‘5R
M;B!%6$E47T9!24Q54D4[#0H@(" @?0T*#0H@(" @;65M<V5T*" F<F5S;6=R
M7V%T=’(L(# L(’-I>F5O9B@@<F5S;6=R7V%T=’(@2 I.PT(" @(’)E<VUG
M<E]A=‘1R+FYP87)T<U]M87@@/2 Q.PT*(" @(’)E<VUG<E]A=‘1R+FUS9U]M
M87A?<VEZ92 ](#(P-#@[#0H-“B @(” OB!3971U<"!T:&4@9&5F875L="!)
M+T@9G5N8W1I;VYS('1O(&AA;F1L92!O<&5N+W)E860O=W)I=&4O+BXN(“HO
M#0H@(” @:6]F=6YC7V9U;F-?:6YI="@@7U)%4TU’4E]#3TY.14-47TY&54Y#
M4RP@)D-O;FYE8W1&=6YC<RP-“B @(” @(" @(" @(" @(" @(" @("!?4D53
M34=27TE/7TY&54Y#4RP@)DEO1G5N8W,@3L-"@T(" @("\J(%-E='5P('1H
M92!A='1R:6)U=&4@9F]R('1H92!E;G1R>2!I;B!T:&4@9FEL97-Y<W1E;2 J
M+PT
(" @(&EO9G5N8U]A=‘1R7VEN:70H(“9);T9U;F-!='1R+”!37TE&3D%-
M(‘P@,#8V-BP@,“P@,” I.PT*#0H@(" @<F5S;6=R7VED(#T@<F5S;6=R7V%T
M=&%C:"@@9’!P+" F<F5S;6=R7V%T=’(L(")T96UP2’5M:612;6=R(BP@7T94
M65!%7T%.62P-“B @(” @(" @(" @(" @(" @(" @(" @(" @(" @(" P+" F
M0V]N;F5C=$9U;F-S+" F26]&=6YC<RP@)DEO1G5N8T%T=’(@3L-“B @(”!I
M9B@@<F5S;6=R7VED(#T](“TQ(“D-“B @(”![#0H@(” @(” @(&9P<FEN=&8H
M(’-T9&5R<BP@(G)E<VUG<E]A='1A8V@H
2!F86EL960Z(“5S7&XB+”!S=’)E
M<G)O<B@@97)R;F@2 I.PT(" @(" @("!R971U<FX@15A)5%]&04E,55)%
M.PT*(" @('T-"@T*(" @("\J(%-E='5P(&]U<B!M97-S86=E(&-A;&QB86-K
M(“HO#0H@(” @;65M<V5T*" F;65S<V%G95]A=‘1R+" P+"!S:7IE;V8H(&UE
M<W-A9V5?871T<B I(“D[#0H@(” @;65S<V%G95]A=‘1R+FYP87)T<U]M87@@
M/2 Q.PT*(" @(&UE<W-A9V5?871T<BYM<V=?;6%X7W-I>F4@/2 T,#DV.PT*
M#0H@(" @+RH@071T86-H(&$@8V%L;&)A8VL@&AA;F1L97(I(&9O<B!T=V@
M;65S<V%G92!T>7!E<R J+PT
(" @(&UE<W-A9V5?:60@/2!M97-S86=E7V%T
M=&%C:"@@9’!P+" F;65S<V%G95]A=‘1R+"!?24]?34%8(“L@,2P-“B @(” @
M(” @(" @(" @(" @(" @(" @(" @(" @(" @(%])3U]-05@@R R+"!M97-S
M86=E7V-A;&QB86-K+"!.54Q,(“D[#0H@(” @:68H(&UE<W-A9V5?:60@/3T@
M+3$@0T(" @('L-“B @(” @(" @9G!R:6YT9B@@<W1D97)R+" B;65S<V%G
M95]A='1A8V@H
2!F86EL960Z(“5S7&XB+”!S=’)E<G)O<B@@97)R;F@2 I
M.PT
(" @(" @("!R971U<FX@15A)5%]&04E,55)%.PT*(" @(‘T-"@T*(" @
M("\J(%-E=‘5P(&$@8V]N=&5X="!F;W(@=&AE(&1I<W!A=&-H(&QA>65R(‘1O
M(‘5S92 J+PT*(" @(&-T<" ](&1I<W!A=&-H7V-O;G1E>‘1?86QL;V,H(&1P
M<" I.PT*(" @(&EF*"!C=’ @/3T@3E5,3" I#0H@(" @>PT*(" @(" @("!F
M<’)I;G1F*"!S=&1E<G(L(")D:7-P871C:%]C;VYT97AT7V%L;&]C*“D@9F%I
M;&5D.B E<UQN(BP-“B @(” @(” @(" @(" @(" @<W1R97)R;W(H(&5R<FYO
M(“D@3L-“B @(” @(" @<F5T=7)N($58251?1D%)3%5213L-“B @(”!]#0H-
M"@T
(” @("\J(%1H92 B1&%T82!0=6UP(B M(&=E="!A;F0@<’)O8V5S<R!M
M97-S86=E<R J+PT*(" @(’=H:6QE*" Q(“D-“B @(”![#0H@(” @(" @(&-T
M<%]R970@/2!D:7-P871C:%]B;&]C:R@@8W1P(“D[#0H@(” @(" @(&EF*"!C
M=’!?<F5T(“D-“B @(” @(” @>PT*(" @(" @(" @(" @9&ES<&%T8VA?:&%N
M9&QE<B@@8W1P(“D[#0H@(” @(" @(‘T-“B @(” @(" @96QS90T*(" @(" @
M("![#0H@(" @(" @(" @("!F<’)I;G1F*"!S=&1E<G(L(")D:7-P871C:%]B
M;&]C:R@I(&9A:6QE9#H@)7-<;B(L#0H@(" @(" @(" @(" @(" @(" @("!S
M=’)E<G)O<B@@97)R;F@2 I.PT(" @(" @(" @(" @<F5T=7)N($58251?
M1D%)3%5213L-“B @(” @(" @?0T*(" @(‘T-"@T*(" @(’)E='5R;B!%6$E4
…7U-50T-%4U,[#0I]#0H
end