11/01/16

Please read the nuttcp.c (linked to current version) source code for changes

********************************************************************************
The nuttcp software is geared toward network managers, and is *NOT* intended
for general public use.  You may send bug reports, feature requests, or general
comments to nuttcp@nuttcp.net but we make no promises about being able
to respond.  In other words, we hope you find this network performance
monitoring tool useful (it's based on the original ttcp/nttcp), but there is
no warranty of any kind.  It has several useful features beyond those of the
basic ttcp/nttcp, such as a server mode, rate limiting, multiple parallel
streams, and timer based usage.  It has been successfully tested and used on
a variety of Solaris, SGI, PPC/X86 Linux, FreeBSD, AIX, and Windows systems,
and should probably work on most other flavors of Unix.  To get a usage
statement, just run nuttcp with no arguments.
********************************************************************************

The source code together with available binaries is available at:

	ftp://ftp.nuttcp.net/pub/nuttcp/

To find the latest version, follow the "latest" symbolic link.
To find a possibly older, better tested version follow the "stable" link.

********************************************************************************
To use as an inetd or xinetd daemon, do the following:

1.  Add an entry similar to the following to the /etc/inetd.conf file
    (for an IPv4 server).

nuttcp  stream  tcp     nowait  root    /usr/local/sbin/tcpd /usr/local/bin/nuttcp -S

Sample xinetd configuration files can be found in the "xinetd.d" subdirectory.

2.  Add entries like the following to the /etc/services file.

nuttcp          5000/tcp
nuttcp-data     5101/tcp
nuttcp6         5000/tcp
nuttcp6-data    5101/tcp

For inetd it may be necessary to run the IPv4 and IPv6 servers on
different ports.

3.  Add a nuttcp entry to the /etc/hosts.allow file to control what hosts
    you want to allow access to the nuttcp service.

4.  Send a HUP signal to the inetd or xinetd process (older xinetd
    requires USR2 signal).

You can also just run a "nuttcp -S" as a normal user process to test out
the server functionality before putting it into the inetd.conf or xinetd.d
configuration file.

The files in the "missing" subdirectory are required to build nuttcp on certain
architectures  which lack either poll() or the newer inet functions.  For
MacOS X the only required extra file is "missing/fakepoll.h".  Solaris
before 2.8 requires all the extra files in missing.

The files in the "cygwin" subdirectory are the source, patches, and license for
the cygwin library which has been linked into the Windows binary.
NOTE:  with cygwin 2.6 support for Windows XP and Windows 2003 has been dropped.

Finally, here's a basic sample usage of the nuttcp client talking to an
already established nuttcp server, specifying a window size of 512 KB
and interval reporting every second, and using the default of transmitting
to the server for 10 seconds and producing brief output (across a GigE
link):

% nuttcp -i1 -w512 192.168.75.75
  117.8587 MB /   1.00 sec =  989.2512 Mbps
  118.0138 MB /   1.00 sec =  989.9721 Mbps
  117.9086 MB /   1.00 sec =  989.0879 Mbps
  118.0239 MB /   1.00 sec =  990.0540 Mbps
  117.9979 MB /   1.00 sec =  989.8300 Mbps
  118.0165 MB /   1.00 sec =  990.0062 Mbps
  118.0052 MB /   1.00 sec =  989.8798 Mbps
  118.0138 MB /   1.00 sec =  989.9880 Mbps
  117.9967 MB /   1.00 sec =  989.8121 Mbps
  118.0165 MB /   1.00 sec =  990.0102 Mbps

 1183.2500 MB /  10.03 sec =  989.8024 Mbps 74 %TX 9 %RX

Without the "-i" interval option, the default brief output gives
a one-line summary such as the following which demonstrates the
simplest use of nuttcp when accepting all the default settings:

% nuttcp 192.168.75.75
  827.8125 MB /  10.02 sec =  692.8015 Mbps 51 %TX 7 %RX

And here's a sample of verbose output.  This test was across a 768 Kbps
DSL line, doing a receive from the server instead of the default transmit,
using a window size of 512 KB, and transferring 8 MB of data (1024 buffers
each of length 8192).

% nuttcp -r -l8192 -n1024 -w512 -v 192.168.7.20
nuttcp-r: v4.0.3: socket
nuttcp-r: buflen=8192, nbuf=1024, nstream=1, port=5001 tcp
nuttcp-r: accept from 192.168.7.20
nuttcp-r: send window size = 16384, receive window size = 1048576
nuttcp-r: 8.0000 MB in 126.15 real seconds = 64.94 KB/sec = 0.5320 Mbps
nuttcp-r: 5893 I/O calls, msec/call = 21.92, calls/sec = 46.71
nuttcp-r: 0.0user 0.0sys 2:06real 0% 0i+0d 0maxrss 1+0pf 0+0csw

nuttcp-t: v4.0.3: socket
nuttcp-t: buflen=8192, nbuf=1024, nstream=1, port=5001 tcp -> 192.168.75.30
nuttcp-t: connect to 192.168.75.30
nuttcp-t: send window size = 1048576, receive window size = 87380
nuttcp-t: 8.0000 MB in 116.43 real seconds = 70.36 KB/sec = 0.5764 Mbps
nuttcp-t: 1024 I/O calls, msec/call = 116.43, calls/sec = 8.80
nuttcp-t: 0.0user 0.0sys 1:56real 0% 0i+0d 0maxrss 1+0pf 0+0csw

We hope you find it useful.

						-Bill Fink
						 billfink@mindspring.com

						-Rob Scott
						 rob@dren.hpc.mil

Contact the projects authors at nuttcp@nuttcp.net

Report bugs to nuttcp-bugs@nuttcp.net
