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.
The manual pages
- Solnix: nc(1) from
pkgs.solnix.illumos-world-man· illumos.org - FreeBSD: nc(1) 15.1-RELEASE
- OpenBSD: nc(1) 8.0
- NetBSD: nc(1) 11.0
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 with | Topic | What differs |
|---|---|---|
| FreeBSD, OpenBSD, NetBSD | -p with -l | On 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, NetBSD | TLS | OpenBSD 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 missing | Solnix 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 -m | Solnix -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 keywords | Solnix -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, NetBSD | Unix-domain sockets | Solnix 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, NetBSD | buffer sizes | Solnix 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, OpenBSD | routing table | Solnix 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 |
| FreeBSD | IPsec options | Solnix -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 behaviour | Solnix -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
-lwith-pin 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-l1234. - Do not rely on
-N,-F,-c,-I,-Oor-V. They are missing on Solnix or exist only on some BSDs, and-Mmeans 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.