nc(1) on Solnix vs Linux and the BSDs

On Solnix, nc is the illumos nc at /usr/bin/nc. It does plain TCP, UDP and Unix-domain sockets, with SOCKS/HTTP proxy support, but has no TLS and no -N. The biggest trap for BSD users: Solnix allows -l together with -p to set the listen port, while FreeBSD, OpenBSD and NetBSD reject that combination.

What Solnix runs

A default Solnix system runs the illumos nc at /usr/bin/nc. No other variants are shipped. The Solnix page documents -B (bypass IPsec policy) and -S (TCP MD5, which needs a security association made with tcpkey(8)).

Differences

Compared withTopicWhat differs
FreeBSD, OpenBSD, NetBSD-p with -lOn Solnix, -p port with -l sets the listen port (allowed only if no port operand is given). On FreeBSD, OpenBSD and NetBSD, using -p with -l is an error, because -p there means source port only.
Source: Solnix nc(1) SYNOPSIS (nc -l ... -p port), -p; FreeBSD nc(1) -p, -l; OpenBSD nc(1) -p, -l; NetBSD nc(1) -p, -l
OpenBSD, NetBSDTLSOpenBSD and NetBSD nc have -c to use TLS, plus -C, -K, -e, -H, -R and -o for certificates and verification. The Solnix page documents none of these, so Solnix nc has no TLS option. The FreeBSD page has none either.
Source: OpenBSD nc(1) -c, -C, -K, -R; NetBSD nc(1) -c, -C, -K, -R; Solnix nc(1) OPTIONS
FreeBSD, OpenBSD, NetBSD-N missingSolnix has no -N. On the BSDs, -N calls shutdown(2) on the socket after EOF on input, which some servers need before they finish. On Solnix the manual documents no equivalent.
Source: FreeBSD nc(1) -N; OpenBSD nc(1) -N; NetBSD nc(1) -N; Solnix nc(1) OPTIONS
FreeBSD, OpenBSD, NetBSD-F (pass socket)Solnix has no -F. On the BSDs, -F passes the first connected socket to stdout with sendmsg(2) and exits, for use with -X and ssh ProxyUseFdpass.
Source: FreeBSD nc(1) -F; OpenBSD nc(1) -F; NetBSD nc(1) -F; Solnix nc(1) OPTIONS
FreeBSD-M meaning and -mSolnix -M sets the outgoing IPv4 TTL or IPv6 hop count. FreeBSD -M collects per-connection TCP statistics and prints them as JSON to stderr. FreeBSD documents no -m, which on Solnix sets a minimum received TTL.
Source: Solnix nc(1) -M, -m; FreeBSD nc(1) SYNOPSIS, -M
FreeBSD, OpenBSD, NetBSD-T keywordsSolnix -T accepts only lowdelay, throughput, reliability or a number from 0 to 255. The BSDs also accept critical, inetcontrol, netcontrol and DiffServ names (ef, af11 ... af43, cs0 ... cs7). OpenBSD and NetBSD also use -T for TLS options.
Source: Solnix nc(1) -T; FreeBSD nc(1) -T; OpenBSD nc(1) -T; NetBSD nc(1) -T
FreeBSD, OpenBSD, NetBSDUnix-domain socketsSolnix documents -U with a stream socket only: its -U synopsis lists no -u, and the path is a single argument. FreeBSD, OpenBSD and NetBSD let -u select a datagram socket with -U, creating a temporary receiving socket in /tmp unless -s is given.
Source: Solnix nc(1) SYNOPSIS (nc -U ...), -U; FreeBSD nc(1) -u, -s; NetBSD nc(1) -u; OpenBSD nc(1) -u
FreeBSD, OpenBSD, NetBSDbuffer sizesSolnix has no -I or -O. On the BSDs, -I sets the TCP receive buffer size and -O the TCP send buffer size.
Source: FreeBSD nc(1) -I, -O; OpenBSD nc(1) -I, -O; NetBSD nc(1) -I, -O; Solnix nc(1) OPTIONS
FreeBSD, OpenBSDrouting tableSolnix has no -V. FreeBSD and OpenBSD -V rtable select the routing table (FIB). OpenBSD also has -W recvlimit; FreeBSD also has --sctp, --lb, --crlf, --tun and --no-tcpopt. None of these are in the Solnix page.
Source: FreeBSD nc(1) -V, --sctp, --lb, --crlf, --tun; OpenBSD nc(1) SYNOPSIS (-V, -W); Solnix nc(1) SYNOPSIS
FreeBSDIPsec optionsSolnix -B bypasses IPsec policy and sends cleartext. It needs the sys_ip_config privilege and fails with -l or -U. FreeBSD has no -B; it has -e and -E to require IPsec ESP.
Source: Solnix nc(1) -B; FreeBSD nc(1) -E, -e
FreeBSD, OpenBSD, NetBSD-n behaviourSolnix -n limits hostname and port arguments to numeric values, and has no effect with -U. The BSD pages describe -n only as skipping DNS or service lookups (OpenBSD: an unresolvable name is an error).
Source: Solnix nc(1) -n; FreeBSD nc(1) -n; OpenBSD nc(1) -n; NetBSD nc(1) -n

Standards

  • POSIX: nc is not a POSIX.1-2024 utility.

Writing portable scripts

  • Do not combine -l with -p in portable scripts: Solnix accepts it, while FreeBSD, OpenBSD and NetBSD reject it. Use the form nc -l [hostname] port, as in the Solnix page example nc -l 1234.
  • Do not rely on -N, -F, -c, -I, -O or -V. They are missing on Solnix or exist only on some BSDs, and -M means different things on FreeBSD and Solnix.

Every difference here is taken from the manual pages linked above: Solnix's published page, Linux (man-pages and the GNU and util-linux manuals), FreeBSD, OpenBSD and NetBSD. Each row names its source. Where a manual is silent, this page is too. Compiled 2026-10-26. Found a mistake? Mail hackers@lists.solnix.io.