Paul -- this is a great stuff and fills in some pieces of my memories.
FYI: CMU had the the Rand Ports code including empty() in some implementations of kernels in use in the mid 1970s. The later UNIX cu(1) program did not exist, and a couple of people hacked together a program called "connect" which was used to connect between serial ports for downloading PPT images to microprocessors such as a KIM-1 and communicating with it. I say a "couple of people," because I do not remember who wrote the original version. It could have been a number of us. I know I hacked on it a good bit, as did others over the course of time (and we did not use source control in those days). The sources were there for all to work with and we all added stuff as we though of things that would help us out.
Anyway, besides microprocessor support, we also used connect(1) to "front-end" the serial lines from the PDP-10's in CS and were doing some rudimentary networking stuff over parallel DR-11C's, in the pre-TCP/IP world [a discussion a couple of us have had separately - more in a minute]. But the point is that the dates line up with my being there and what we were doing at the time. One version of connect(1) used the empty() system call and Rand ports to do its thing. I also remember reading the connect(1) code as an early education in network technology and concepts. We would later take hunks of into a TCP stack [3-4 years later Phil Karn would write the infamous KA9Q TCP stack and a few years later, Stan Smith and I would write the VMS TCP etc in BLISS but it model on some C network stuff from CMU... -- amazing circle].
Anyway, around the same time (either sept 76 or 77 would be my guess) the late Ted Kowalski came to CMU for his OYOC time (I've forgotten which it was to be honest) and brought a pre-UNIX/TS system with him - TS begat V7. Ted brought that system up on the 11/34 in EE and I remember connect(1) was the most important program that immediately broke. I also remember a large argument between Ted and one of the other hackers (I've forgotten whom), Ted saying we did not need it, it was wasteful, etc... and not in the official editions. I remember he re-implemented the connect(1) program one night with multiple process and EE systems were from them on based on Ted's system [although, I would later get to know Chesson and Greg would give me the mpx() code a year or two later for some networking stuff I would work on but that is a different story].
The point is that while I have no memory of capac(), but I can confirm that I definitely programmed with the empty() system call and Rand ports on a v6 based kernel in the mid-1970s and that it was definitely at places besides Rand themselves.
Another thing I want thank you for it confirming something I have been saying for few years and some people have had a hard time believing. The specifications for what would become IP and TCP were kicking around the ARPAnet in the late 1970s. We definitely had them at CMU and that's where I first was introduced to them, long before the planned cut over in the early 1980s. I probably was not aware of the global politics involved outside of the ARPA community because I certainly thought at the time IP was we were headed and it was what we were thinking about and considering how to implement.
Anyway - thanks again for a great piece of hunt up some good stuff.
Clem