MORE INFORMATION
The following lines from a Network Monitor trace illustrate the problem.
The first sequence illustrates the failure.
5 CLIENT PRINTER 0x99E4 -> 0xFFFF, Seq = 0, Ack = 0, Alloc = 3
6 PRINTER CLIENT 0x3C8E -> 0x99E4, Seq = 0, Ack = 0, Alloc = 0
7 PRINTER CLIENT 0x3C8E -> 0x99E4, Seq = 0, Ack = 0, Alloc = 0
8 CLIENT PRINTER 0x99E4 -> 0x3C8E, Seq = 0, Ack = 1, Alloc = 4
9 CLIENT PRINTER 0x99E4 -> 0x3C8E, Seq = 0, Ack = 1, Alloc = 4
10 PRINTER CLIENT 0x3C8E -> 0x99E4, Seq = 1, Ack = 1, Alloc = 1
11 PRINTER CLIENT 0x3C8E -> 0x99E4, Seq = 1, Ack = 1, Alloc = 1
12 CLIENT PRINTER 0x99E4 -> 0x3C8E, Seq = 1, Ack = 2, Alloc = 5
13 CLIENT PRINTER 0x99E4 -> 0x3C8E, Seq = 1, Ack = 2, Alloc = 5
14 PRINTER CLIENT 0x3C8E -> 0x99E4, Seq = 2, Ack = 2, Alloc = 2
15 CLIENT PRINTER 0x99E4 -> 0x3C8E, Seq = 2, Ack = 2, Alloc = 5
16 PRINTER CLIENT 0x3C8E -> 0x99E4, Seq = 2, Ack = 3, Alloc = 3
17 CLIENT PRINTER 0x99E4 -> 0x3C8E, Seq = 3, Ack = 2, Alloc = 5
18 PRINTER CLIENT 0x3C8E -> 0x99E4, Seq = 2, Ack = 4, Alloc = 3
19 CLIENT PRINTER 0x99E4 -> 0x3C8E, Seq = 4, Ack = 2, Alloc = 5
20 CLIENT PRINTER 0x99E4 -> 0x3C8E, Seq = 4, Ack = 2, Alloc = 5
21 CLIENT PRINTER 0x99E4 -> 0x3C8E, Seq = 4, Ack = 2, Alloc = 5
22 CLIENT PRINTER 0x99E4 -> 0x3C8E, Seq = 4, Ack = 2, Alloc = 5
23 CLIENT PRINTER 0x99E4 -> 0x3C8E, Seq = 4, Ack = 2, Alloc = 5
24 CLIENT PRINTER 0x99E4 -> 0x3C8E, Seq = 4, Ack = 2, Alloc = 5
25 CLIENT PRINTER 0x99E4 -> 0x3C8E, Seq = 4, Ack = 2, Alloc = 5
26 CLIENT PRINTER 0x99E4 -> 0x3C8E, Seq = 4, Ack = 2, Alloc = 5
.
.
.
51 CLIENT PRINTER Diag Request: Exclude 0 Addresses
52 PRINTER CLIENT Diag Resp: Ver 1.0, SPX Socket = 0x4801, 2 Components
53 CLIENT PRINTER Diag Request: Exclude 0 Addresses
54 PRINTER CLIENT Diag Resp: Ver 1.0, SPX Socket = 0x4801, 2 Components
55 CLIENT PRINTER 0x99E5 -> 0xFFFF, Seq = 0, Ack = 0, Alloc = 3
56 PRINTER CLIENT 0xBA22 -> 0x99E5, Seq = 0, Ack = 0, Alloc = 0
Notice that in frame 18 the Printer increments the ACK to 4, but the
allocation number remains at 3. The client should stop sending at this
point, but in frames 19 through 26 the client continues to send data.
After a short time, in frame 51, the client begins negotiating a new
session, but as long as there is a "buffer full" situation, the new session
will also terminate. This process continues until the print sequence
completes without encountering the "buffer full" signal from the printer.
The second trace sequence below illustrates the correct behavior.
131 CLIENT PRINTER 0x1870 -> 0xFFFF, Seq = 0, Ack = 0, Alloc = 3
132 PRINTER CLIENT 0x3CBA -> 0x1870, Seq = 0, Ack = 0, Alloc = 0
133 PRINTER CLIENT 0x3CBA -> 0x1870, Seq = 0, Ack = 0, Alloc = 0
134 CLIENT PRINTER 0x1870 -> 0x3CBA, Seq = 0, Ack = 1, Alloc = 4
135 CLIENT PRINTER 0x1870 -> 0x3CBA, Seq = 0, Ack = 1, Alloc = 4
136 PRINTER CLIENT 0x3CBA -> 0x1870, Seq = 1, Ack = 1, Alloc = 1
137 PRINTER CLIENT 0x3CBA -> 0x1870, Seq = 1, Ack = 1, Alloc = 1
138 CLIENT PRINTER 0x1870 -> 0x3CBA, Seq = 1, Ack = 2, Alloc = 5
.
.
.
141 CLIENT PRINTER 0x1870 -> 0x3CBA, Seq = 1, Ack = 2, Alloc = 5
142 PRINTER CLIENT 0x3CBA -> 0x1870, Seq = 2, Ack = 2, Alloc = 2
143 CLIENT PRINTER 0x1870 -> 0x3CBA, Seq = 2, Ack = 2, Alloc = 5
144 PRINTER CLIENT 0x3CBA -> 0x1870, Seq = 2, Ack = 3, Alloc = 3
145 CLIENT PRINTER 0x1870 -> 0x3CBA, Seq = 3, Ack = 2, Alloc = 5
146 PRINTER CLIENT 0x3CBA -> 0x1870, Seq = 2, Ack = 4, Alloc = 3
The printer increments the allocation numbers as expected up frame 146.
After this frame, the client temporarily discontinues sending data until it
gets the buffers clear signal from the printer. This occurs in the sequence
below:
316 PRINTER CLIENT 0x3CBA -> 0x1870, Seq = 2, Ack = 4, Alloc = 4
317 CLIENT PRINTER 0x1870 -> 0x3CBA, Seq = 4, Ack = 2, Alloc = 5
.
.
.
In frame 316, the printer finally increments the allocation number,
and the client immediately responds in frame 317 with more data. At that
point, the print job continues uninterrupted until its completion.
For additional information, please see the following article in the
Microsoft Knowledge Base:
ARTICLE-ID:
151677
TITLE : NWLink SPX Ignores Allocation Number Sent By Peer
The Hewlett-Packard products discussed here are manufactured by Hewlett-
Packard, a vendor independent of Microsoft; we make no warranty, implied or
otherwise, regarding the products' performance or reliability.