Included are three programs:

(1) MKPIPE2.EXE, an OS/2 multi-threaded program for running
    on the SQL Server machine.  This program has been altered to
    allow lessening the impact on the host machine.	This is
    achieved by allowing the user to select how long the
    MKPIPE2 server process waits before responding to an incoming
    request.  While waiting, MKPIPE2 yields to the OS/2 scheduler,
    allowing other programs to run.  With a 500 mS delay,  on
    a Compaq 386/20e, it consumed about 10% of CPU resources.  It
    should consume preportionately less on a faster machine.  With
    a 0 mS delay CPU consumption will be much higher.
    
    For most effective testing, use the least delay that can be
    tolerated.
    
    No arguments are needed.  It will automatically start up 10
    threads for testing Named Pipes.

(2) RDPIPE2.EXE, an OS/2 multi-threaded program for running
    on an OS/2 client machine.  No command-line arguments are
    needed.  It will prompt for the name of the server on which
    MKPIPE2 is running.

(3) RDPIPE.EXE, a dual-mode (bound) single-threaded version
    of RDPIPE2 that can be run on either a DOS, Windows, or OS/2
    client workstation.  Each execution of this program only tests
    a single Named Pipe connection.  Multiple copies of this 
    program may be started on different workstations, or in different
    OS/2 or Windows sessions.


NOTES:

It is possible to use these programs with minimal impact during
day-to-day operations.  Of course, I cannot guarantee non-
interference, and there is always some risk.  

If possible, I recommend these programs be run for extended
periods.

Both MKPIPE2 and RDPIPE2 will accept a single numeric
command-line parameter for the number of threads to start.
It may be beneficial to start MKPIPE2 with its default of
10 threads, and then limit RDPIPE2 on an OS/2 workstation to
about 5, and run 5 more individual executions of RDPIPE on
different DOS workstations.

A more typical simulation of heavy-duty SQL Server use
would be to start MKPIPE2 with about 30 threads, like this:
"MKPIPE2 30", then enter 0 for the delay time.	Ideally,
run RDPIPE2 on 3 other OS/2 client workstations with 10 threads each
(the default).	If this number of client workstations isn't available,
use as many as you have, making sure 30 threads are spread
among the number available.

Even a totally clean run with these programs for an extended
period does not guarantee reliable Named Pipe communications.
As a result of varying traffic and other dynamic conditions,
failure in the particular vendor's Named Pipe layer may
occur under unpredictable circumstances.  However, these
programs should catch most severe errors.

The error codes returned are standard OS/2 error codes that are
documented in a number of references.

The programs can be terminated with CTL-C.

Any errors are generally an indication of a failure in the
network vendor's Named Pipe support.  You may even observe
OS/2 GP-Faults, or Internal Processing Errors.	These indicate
a ring 0 network device driver has killed OS/2.

Joe Marler
Microsoft Product Support Services.


*** NOTICE ***

   NO WARRANTY.  ANY USE BY YOU OF THE SOFTWARE IS AT YOUR OWN RISK.
   THE SOFTWARE IS PROVIDED FOR USE "AS IS" WITHOUT WARRANTY OF ANY KIND.
   MICROSOFT AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES OF ANY KIND, EITHER
   EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMINITATION, IMPLIED WARRANTIES
   OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  MICROSOFT WILL
   PROVIDE NO SUPPORT SERVICES FOR THIS SOFTWARE.

   NO LIABILITY FOR CONSEQUENTIAL DAMAGES.  In no event shall Microsoft or
   it suppliers be liable for any damages whatsoever (including, without
   limitation, damges for loss of business profits, business interruption,
   loss of business information, or other pecuniary loss) arising out of
   the use or inability to use this Microsoft product, even if Microsoft
   has been advised of the possibility of such damages.  Because some 
   states/jurisdictions do not allow the exclusion or limitation of
   liability for consequential or incidental damages, the above limitation
   may not apply to you.

   You may have additional rights, which vary from state/jurisdiction to
   state/jurisdiction.

