BUG: NetBios NCBCANCEL over TCP/IP Does Not Block Under Win95

ID: Q195195

The information in this article applies to:

SYMPTOMS

When you use blocking Netbios calls over TCP/IP, it is possible that calling NCBCANCEL on a blocked Netbios call (such as NCBSEND or NCBRECV) will not block on Windows 95 Gold and Service Pack 1. The call to Netbios() returns immediately with a success. However, this does not guarantee that the request command has been cleanly cancelled.

This is especially important if the application is in the process of cleaning up before exiting. If the NCBCANCEL command is issued and the Netbios name table is immediately cleared either through NCBDELNAME or NCBRESET commands, the results are unpredictable and could crash the application.

RESOLUTION

To prevent any instability, ensure that the command to be cancelled returns from its Netbios() call with the error NRC_CMDCAN before manipulating the Netbios name table.

STATUS

Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article.

MORE INFORMATION

Steps to Reproduce Behavior

1. Set TCP/IP as the default protocol.

2. Issue a synchronous Netbios() NCBRECV command in a child thread.

3. Issue a Netbios NCBCANCEL command in the main thread to cancel this

   NCBRECV.

4. The NCBCANCEL command returns immediately with success. This would imply
   that the NCBRECV was cancelled. However, the NCBRECV is still active and
   takes some time before it terminates.

Additional query words:
Keywords          : kbnetwork kbAPI kbNetBIOS kbSDKPlatform 
Issue type        : kbbug
Solution Type     : kbpending

Last Reviewed: November 5, 1998