CC Explainer
C · 6 · Advanced / Job-Ready29 / 35 · 83%

TCP Sockets

Berkeley sockets — the API every network daemon on Earth is built on.

shortcuts: ← prev · → next · M mark
1

Server: bind → listen → accept

Four syscalls give you a TCP server.

Example
example
int s = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in a = {
    .sin_family = AF_INET,
    .sin_port   = htons(8080),
    .sin_addr   = { INADDR_ANY },
};
bind(s, (struct sockaddr*)&a, sizeof a);
listen(s, 16);

for (;;) {
    int c = accept(s, NULL, NULL);
    write(c, "hello\n", 6);
    close(c);
}
2

Client: socket → connect

Same socket API, one connect call.

Example
example
int s = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in a = {
    .sin_family = AF_INET,
    .sin_port   = htons(8080),
};
inet_pton(AF_INET, "127.0.0.1", &a.sin_addr);
connect(s, (struct sockaddr*)&a, sizeof a);

char buf[64];
ssize_t n = read(s, buf, sizeof buf);
write(1, buf, n);
3

Handle Many Clients

For scale: fork per client, threads, or an event loop with epoll/kqueue.

TIP
Modern high-perf servers use epoll (Linux) / kqueue (BSD) / IOCP (Windows).