Almost everything I've ever done with networking was much closer to applied computer science than pure CS, but writing an HTTP client (open socket, construct and parse headers, deal with character encoding) was one of the more eye-opening experiences when I was getting started.
This is something I'd love to do. Do you have any resources for learning the background info? Everywhere I've looked just plugs in some TCP/socket library, but I think the real learning would come from _making_ the library itself.
You mean instead of using the TCP stack included in the kernel, you want to write your own? You could use raw sockets (described in man 7 raw) for that (but note that they require elevated privilege). Use socket(PF_INET, SOCK_RAW, IPPROTO_TCP) to get a raw TCP socket, then send and receive TCP packets as raw bytes over the socket.