commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mark Himsley <m...@mdsh.com>
Subject Re: commons/net whois fails with whois.opensrs.net
Date Tue, 29 Jul 2003 13:45:52 GMT
--On 28 July 2003 22:06 -0400 "Daniel F. Savarese" <dfs@savarese.org> wrote:

> In message <10804015.1059400334@[192.168.0.40]>, Mark Himsley writes:
> > My basic question is: how do I stop commons/net from setting the TCP
> > push  flag on the socket connection.
> >
> > I've looked through the source of WhoisClient, FingerClient,
> > SocketClient,  SocketFactory, DefaultSocketFactory and as yet don't
> > have a clue why the  push flag is set ant the query is fragmented.
>
> I'm going to have to punt this to someone else (maybe you if you've
> got the interest/time) to fix and patch, but if the push flag is being
> set, it's being done automatically by the JVM's class library in native
> code.  There's probably a call to OutputStream.flush() somewhere and
> the underlying native code is turning that into TCP push.  Why that's
> happening in the middle of as small amount of data as occurs in a
> whois query, I don't know.

Yes, that is a good question. I am wondering if there is a bug somewhere 
which is forcing a flush() after the first byte of a 
DataOutputStream.writeBytes() call. I shall have to test this hypotheses at 
some stage (unless someone else can confirm/deny this problem) and also 
test with JVM 1.4.1_02.

What I have done to correct this problem is to apply the attached patch to 
(admittedly to the NET_1_0_0 tagged version of) commons/net. I'm not 
completely sure what the implications are for converting a 
DataOutputStream.writeBtyes(String) into a PrintStream.print(String), which 
is essentially what I have done. I can't immediately see a problem though.


Looking with snort at the data sent from the fwhois example commons/net 
source with this patch applied I can see that the request is sent in one 
packet - still with the push flag set, but I guess that's because of the 
output.flush() call in FingerClient.getInputStream().

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

07/29-13:17:47.838544 62.49.203.77:1591 -> 216.40.33.170:43
TCP TTL:127 TOS:0x0 ID:11642 IpLen:20 DgmLen:50 DF
***AP*** Seq: 0xC9BCBD8C  Ack: 0xDE3FD9B2  Win: 0xFAF0  TcpLen: 20
6D 64 73 68 2E 63 6F 6D 0D 0A                    mdsh.com..

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+


Thanks for your time.


> daniel

-- 
Mark Himsley
Mime
  • Unnamed multipart/mixed (inline, None, 0 bytes)
View raw message