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).