I have just spent an entire day chasing down a problem with 'printing'
on HPUX and it turns out to be a 'OS' problem. I strongly suspect
that this problem might be on other systems, so I am issuing this
warning to the list.
Summary: SO_LINGER does not work and close() discards untransmitted
data. (This is listed in HP's documents as an 'optimization'...:-)
How to reproduce the error:
Open a data link to a VERY slow receiver, and make sure that the
data you send exceeds the sum of the receive buffer (on the remote host)
and the transmit buffer (on the sending host). Note: you need two hosts
to do this as send/receives to localhost do not appear to aggravate this
behaviour.
When you do a close, the data pending in the 'transmit' buffer on the server
appears to be discarded. The amount that is discarded is fairly random,
but some usually is.
Test code:
a) get the LPRng distribution, find common/monitor.c, and patch it as below.
This will read a single character at a time.
b) compile the tcpsend program attached below.
c) start monitor on one host:
monitor
d) use tcpsend to send a file to the other host
tcpsend remotehost 2001 <somefile
Note: the tcpsend.c file is usually long enough.
e) observe (hopefully!) that the entire file gets sent and
received.
f) Now edit the tcpsend.c file:
}
/* we shut down the connection */
shutdown(sock,1);
while( (n = read(sock,&buffer,sizeof(buffer))) > 0 );
close(sock);
return(0);
Remove the shutdown and read lines:
/* we shut down the connection */
#if 0
shutdown(sock,1);
while( (n = read(sock,&buffer,sizeof(buffer))) > 0 );
#endif
close(sock);
return(0);
g) Recompile tcpsend and repeat the experiment.
If you get the entire file, then you can sign and dance your
way down the halls in joy.
If you do not get the entire file, then you can now start the
dreaded HP service support patch/fix/pray cycle.
Now while I have written this in a fairly lighthearted manner,
please note that there are a lot of people out there that may have
the same problem.
If you have been suffering from the mysterious 'unexpectedly terminate job'
syndrome, then you may want to try this test as well.
Patrick Powell Astart Technologies,
[EMAIL PROTECTED] 9475 Chesapeake Drive, Suite D,
Network and System San Diego, CA 92123
Consulting 858-874-6543 FAX 858-279-8424
LPRng - Print Spooler (http://www.astart.com)
begin 664 tcpsend.c
M+RH*("H@=&-P<V5N9"!;+70@=&EM96]U=%T@:&]S="!P;W)T(%MF:6QE<UT*
M("H*("H@;W!E;B!A(%1#4"])4"!C;VYN96-T:6]N('1O('!O<G0@;VX@:&]S
M="!A;F0@<V5N9"!F:6QE<PH@*B`@4W5P97(@;&EG:'1W96EG:'0@3%!2(#\_
M/PH@*B`D260D"B`J+PH*(VEN8VQU9&4@/'5N:7-T9"YH/@HC:6YC;'5D92`\
M<W1D;&EB+F@^"B-I;F-L=61E(#QS>7,O='EP97,N:#X*(VEN8VQU9&4@/&9C
M;G1L+F@^"B-I;F-L=61E(#QS>7,O<V]C:V5T+F@^"B-I;F-L=61E(#QS=&1I
M;RYH/@HC:6YC;'5D92`\;F5T:6YE="]I;BYH/@HC:6YC;'5D92`\;F5T9&(N
M:#X*(VEN8VQU9&4@/&%R<&$O:6YE="YH/@HC:6YC;'5D92`\97)R;F\N:#X*
M(VEN8VQU9&4@/'-T<FEN9RYH/@HC:6YC;'5D92`\<VEG;F%L+F@^"@IC:&%R
M("I0<F]G(#T@(C\_/R(["@IC:&%R("IM<V=;72`]('L*"2)U<V4Z("5S(%LM
M="!T:6UE;W5T72!H;W-T('!O<G0@6V9I;&5S72(L"@DB("`M="!T:6UE;W5T
M("`M('1R>2!C;VYN96-T:6YG(&9O<B!T:6UE;W5T('-E8V]N9',B+`H),`I]
M.PH*:6YT(&UA>%]T<GD@/2`Q,#L*"G9O:60@9&]?<V5N9"@@:6YT('-O8VLL
M(&EN="!F9"P@8VAA<B`J;F%M92`I.PIV;VED(%-E=%]L:6YG97(H(&EN="!S
M;V-K+"!I;G0@;B`I.PH*=F]I9"!U<V%G92AV;VED*0I["@EI;G0@:3L*"69P
M<FEN=&8H('-T9&5R<BP@;7-G6S!=+"!0<F]G("D["@EF<')I;G1F*"!S=&1E
M<G(L(")<;B(I.PH)9F]R*"!I(#T@,3L@;7-G6VE=.R`K*VD@*7L*"0EF<')I
M;G1F*"!S=&1E<G(L("(E<UQN(BP@;7-G6VE=("D["@E]"@EE>&ET*#$I.PI]
M"@IC:&%R(&)U9F9E<ELQ,"HQ,#(T73L*"FEN="!M86EN*"!I;G0@87)G8RP@
M8VAA<B`J*F%R9W8@*0I["@EI;G0@;BP@=')Y.PH):6YT('-O8VL["2`@("`@
M("`@("\J('-O8VME="`J+PH)8VAA<B`J<RP@*FAO<W0L("IP;W)T.PH)<W1R
M=6-T('-O8VMA9&1R7VEN(&1E<W1?<VEN.R`@("`@+RH@:6YE="!S;V-K970@
M861D<F5S<R`J+PH)<W1R=6-T(&AO<W1E;G0@*FAO<W1?96YT(#T@,#L*"@DH
M=F]I9"ES:6=N86PH(%-)1U!)4$4L(%-)1U])1TX@*3L*"6EF*"!A<F=V6S!=
M("D@4')O9R`](&%R9W9;,%T["@EI9B@@*',@/2!S=')R8VAR*%!R;V<L)R\G
M*2D@*7L*"0E0<F]G(#T@<RLQ.PH)?0H)=VAI;&4H("AN(#T@9V5T;W!T*&%R
M9V,L(&%R9W8L(")T.B(I*2`A/2!%3T8@*7L*"0ES=VET8V@H;BE["@D)8V%S
M92`G="<Z(&UA>%]T<GD@/2!A=&]I*&]P=&%R9RD[(&)R96%K.PH)"61E9F%U
M;'0Z('5S86=E*"D[(&)R96%K.PH)"7T*"7T*"6EF*"!A<F=C("T@;W!T:6YD
M(#P@,B`I('5S86=E*"D["@H*"7-O8VL@/2`M,3L*"6UE;7-E="@F9&5S=%]S
M:6XL(#`L('-I>F5O9B`H9&5S=%]S:6XI*3L*"@EH;W-T(#T@87)G=EMO<'1I
M;F0K*UT["@EP;W)T(#T@87)G=EMO<'1I;F0K*UT["@H):68H("AH;W-T7V5N
M="`](&=E=&AO<W1B>6YA;64H(&AO<W0@*2D@*7L*"0ED97-T7W-I;BYS:6Y?
M9F%M:6QY(#T@:&]S=%]E;G0M/FA?861D<G1Y<&4["@D):68H(&AO<W1?96YT
M+3YH7VQE;F=T:"`^('-I>F5O9B@@9&5S=%]S:6XN<VEN7V%D9'(@*2`I>PH)
M"0EF<')I;G1F*'-T9&5R<BPB)7,Z(&%D9')E<W,@;&5N9W1H('=R;VYG7&XB
M+"!0<F]G*3L*"0D)97AI="@Q*3L*"0E]"@D);65M8W!Y*"9D97-T7W-I;BYS
M:6Y?861D<BP@:&]S=%]E;G0M/FA?861D<E]L:7-T6S!=+"!H;W-T7V5N="T^
M:%]L96YG=&@@*3L*"7T@96QS92`*"0DO*B!I9B@@:6YE=%]P=&]N*"!!1E])
M3D54+"!H;W-T+"`F9&5S=%]S:6XN<VEN7V%D9'(@*2`A/2`Q("E[("HO"@D)
M:68H("AD97-T7W-I;BYS:6Y?861D<BYS7V%D9'(@/2!I;F5T7V%D9'(H(&AO
M<W0@*2D@/3T@+3$@*7L*"0EF<')I;G1F*'-T9&5R<BPB)7,Z(&-A;FYO="!F
M:6YD(&%D9')E<W,@9F]R("<E<R=<;B(L(%!R;V<L(&AO<W0@*3L*"0EE>&ET
M*#$I.PH)?0H);B`](&%T;VDH<&]R="D["@EI9B@@;B`\/2`P("E["@D)9G!R
M:6YT9BAS=&1E<G(L(B5S.B!B860@<&]R="`G)7,G7&XB+"!0<F]G+"!P;W)T
M("D["@D)97AI="@Q*3L*"7T*"61E<W1?<VEN+G-I;E]P;W)T(#T@:'1O;G,H
M;BD["B`@("`O*B!W92!G970@=&AE('!R:6YT86)L92!F<F]M('1H92!S;V-K
M970@861D<F5S<R`J+PHC:68@,`H@("`@9G!R:6YT9BAS=&1E<G(L(")C;VYN
M96-T('1O("<E<R<L<&]R="`E9%QN(BP*"0EI;F5T7VYT;V$H(&1E<W1?<VEN
M+G-I;E]A9&1R("DI+`H)"2AI;G0I(&YT;VAS*&1E<W1?<VEN+G-I;E]P;W)T
M*2`I.PHC96YD:68*"71R>2`](#`["@ED;WL@"@D):68H('-O8VL@(3T@+3$@
M*2!C;&]S92AS;V-K("D["@D)<V]C:R`]("TQ.PH)"7-O8VL@/2!S;V-K970H
M049?24Y%5"P@4T]#2U]35%)%04TL(#`@*3L*"0EI9B@@<V]C:R`]/2`M,2`I
M>PH)"0EF<')I;G1F*'-T9&5R<BPB)7,Z('-O8VME="@I(&9A:6QE9"`G)7,G
M7&XB+"!0<F]G+"!S=')E<G)O<BAE<G)N;RD@*3L*"0D)97AI="@Q*3L*"0E]
M"@D);B`](&-O;FYE8W0H<V]C:RP@*'9O:60@*BDF9&5S=%]S:6XL('-I>F5O
M9BAD97-T7W-I;BD@*3L*"0EI9B@@;B`]/2`M,2`F)B`K*W1R>2`\(&UA>%]T
M<GD@*7L*"0D)<VQE97`H,2D["@D)?2!E;'-E('L*"0D)8G)E86L["@D)?0H)
M?7=H:6QE*"!N(#T]("TQ("D["@EI9B@@;B`]/2`M,2`I>PH)"69P<FEN=&8H
M<W1D97)R+"`B)7,Z(&-O;FYE8W0@=&\@)R5S)RQP;W)T("5D(&9A:6QE9"!A
M9G1E<B`E9"!T<FEE<R`M("5S7&XB+`H)"0E0<F]G+`H)"0EI;F5T7VYT;V$H
M(&1E<W1?<VEN+G-I;E]A9&1R*2P*"0D)*&EN="D@;G1O:',H9&5S=%]S:6XN
M<VEN7W!O<G0I+"!T<GDL('-T<F5R<F]R*&5R<FYO*2`I.PH)"65X:70H,2D[
M"@E]"@EI9B@@;W!T:6YD(#T](&%R9V,@*7L*"0ED;U]S96YD*"!S;V-K+"`P
M+"`B<W1D:6XB("D["@E](&5L<V4@9F]R*#L@;W!T:6YD(#P@87)G8SL@*RMO
M<'1I;F0@*7L*"0EI9B@@*&X@/2!O<&5N*&%R9W9;;W!T:6YD72P@3U]21$].
M3%DL(#`I*2`]/2`M,2`I>PH)"0EF<')I;G1F*'-T9&5R<BP@(B5S.B!C86YN
M;W0@;W!E;B`G)7,G("T@)7-<;B(L"@D)"0E0<F]G+"!A<F=V6V]P=&EN9%TL
M('-T<F5R<F]R*&5R<FYO*2`I.PH)"0EE>&ET*#$I.PH)"7T*"0ED;U]S96YD
M*"!S;V-K+"!N+"!A<F=V6V]P=&EN9%T@*3L*"0EC;&]S92AN*3L*"7T*"2\J
M('=E('-H=70@9&]W;B!T:&4@8V]N;F5C=&EO;B`J+PH)<VAU=&1O=VXH<V]C
M:RPQ*3L*"7=H:6QE*"`H;B`](')E860H<V]C:RPF8G5F9F5R+'-I>F5O9BAB
M=69F97(I*2D@/B`P("D["@EC;&]S92AS;V-K*3L*"7)E='5R;B@P*3L*?0H*
M=F]I9"!D;U]S96YD*"!I;G0@<V]C:RP@:6YT(&9D+"!C:&%R("IN86UE("D*
M>PH):6YT(&-N="P@;BP@:3L*"7=H:6QE*"`H;B`](')E860H9F0L8G5F9F5R
M+'-I>F5O9BAB=69F97(I*2D@/B`P("E["@D)9F]R*"!C;G0@/2!I(#T@,#L@
M8VYT(#X](#`@)B8@:2`\(&X[(&D@*ST@8VYT("E["@D)"6-N="`]('=R:71E
M*'-O8VLL8G5F9F5R*VDL;BUI*3L*"0E]"@D):68H(&-N="`\(#`@*7L*"0D)
M9G!R:6YT9BAS=&1E<G(L("(E<SH@8V%N;F]T('=R:71E('1O(')E;6]T92!H
M;W-T("T@)7-<;B(L"@D)"0E0<F]G+"!S=')E<G)O<BAE<G)N;RD@*3L*"0D)
M97AI="@Q*3L*"0E]"@E]"@EI9B@@;B`\(#`@*7L*"0EF<')I;G1F*'-T9&5R
M<BP@(B5S.B!C86YN;W0@<F5A9"!F<F]M("<E<R<@+2`E<UQN(BP*"0D)4')O
L9RP@;F%M92P@<W1R97)R;W(H97)R;F\I("D["@D)97AI="@Q*3L*"7T*?0IO
`
end
*** /tmp/monitor.c Sat Oct 14 12:55:00 2000
--- common/monitor.c Wed Oct 11 10:07:28 2000
***************
*** 239,245 ****
if( i >= max_port ) max_port = i+1;
FD_SET(i, &readfds);
} else {
! c = read( i, buffer, 1 );
if( c == 0 ){
/* closed connection */
FPRINTF(STDOUT, "closed connection
%d\n", i );
--- 239,245 ----
if( i >= max_port ) max_port = i+1;
FD_SET(i, &readfds);
} else {
! c = read( i, buffer, sizeof(buffer)-1 );
if( c == 0 ){
/* closed connection */
FPRINTF(STDOUT, "closed connection
%d\n", i );
***************
*** 257,263 ****
memmove(in->buffer,s,
strlen(s)+1 );
in->len = strlen(in->buffer);
}
- usleep(10000); /* wait 10 milliseconds
*/
} else {
FPRINTF( STDERR, "read error - %s\n",
Errormsg(errno) );
--- 257,262 ----
-----------------------------------------------------------------------------
YOU MUST BE A LIST MEMBER IN ORDER TO POST TO THE LPRNG MAILING LIST
The address you post from MUST be your subscription address