Microsoft KB Archive/271626

From BetaArchive Wiki
Knowledge Base


Article ID: 271626

Article Last Modified on 1/29/2007



APPLIES TO

  • Microsoft Distributed Component Object Model 1.2
  • Microsoft Windows 95
  • Microsoft Windows 98 Standard Edition
  • Microsoft Windows 98 Second Edition
  • Microsoft Windows Millennium Edition



This article was previously published under Q271626

SYMPTOMS

The Component Object Model (COM) IStream::Read method may seem to stop responding (hang) if a TCP connection time out occurs.

This situation can occur if the network is disrupted, or if transmissions are delayed long enough to cause the server to drop the connection.

CAUSE

If the server does not receives acknowledgements (ACKS) for sent packets, it eventually drops the connection. The client never returns from the underlying socket read, because there is no time-out option set and the client never sees further traffic from the server.

To hide network interface details, DCOM uses the Remote Procedure Call (RPC) technology. This, in turn, uses Windows Sockets (Winsock) to abstract session handling. Unlike Microsoft Windows 2000, the RPC implementation in the Windows versions listed above do not include "keepalive" capabilities. Additionally, unlike Microsoft Windows NT and Windows 2000, the RPC RpcCancelThread and RpcCancelThreadEx functions are not implemented.

It is not feasible to add keepalive or call cancel functionality to the RPC implementation on the listed Windows versions without compromising reliability and stability.

RESOLUTION

Microsoft recommends having the IStream methods read data in less than 4-KB blocks. Although this cannot guarantee a total resolution for the problem, it substantially decreases the window of vulnerability.

On Ethernet, the maximum data buffer size that will keep the TCP layer from dividing the buffer into multiple packets is 1,408 bytes. This value takes the DCOM configuration selections for Authentication, Impersonation, and Security into account (see the Default Properties tab in the Dcomcnfg utility).

You can verify the following packet information by using the Microsoft Network Monitor tool.

              Size  Offset
Packet Field  (dec)  (hex)
--------------------------
Ether header:   14   x0000
ip header:      20   x000E
tcp header:     20   x0022
RPC header:     44   x0036
Payload:      1408   x0062
Trailer:         8   x05E2
                    

MORE INFORMATION

For additional information about related IStream methods, click the article number below to view the article in the Microsoft Knowledge Base:

269874 DCOM IStream::Write() Corrupts Data with No Error Return


For additional information about packet sizes, click the article number below to view the article in the Microsoft Knowledge Base:

183437 Description of the Internet Protocol Packet Size Setting



Additional query words: DCOM read hang network timeout

Keywords: kbdcom kbprb KB271626