From 2abf6dc82fb4df2249cbd920cbf82d7d68ff4467 Mon Sep 17 00:00:00 2001 From: Fabio Scotto di Santolo Date: Fri, 22 Aug 2025 16:33:15 +0200 Subject: [PATCH] Added README for extra arguments --- 16_NetworkIPCSockets/README.md | 99 ++++++++++++++++++++++++++++++++++ README.md | 5 ++ 2 files changed, 104 insertions(+) create mode 100644 16_NetworkIPCSockets/README.md diff --git a/16_NetworkIPCSockets/README.md b/16_NetworkIPCSockets/README.md new file mode 100644 index 0000000..f1e8e34 --- /dev/null +++ b/16_NetworkIPCSockets/README.md @@ -0,0 +1,99 @@ +# 📘 APUE – Chapter 16: Sockets Summary + +### **1. Introduction to Sockets** + +- Sockets are an abstraction for network communication. +- Enable communication between processes over the network. +- Support multiple protocols: TCP, UDP (IPv4, IPv6). + +### **2. Socket Types** + +- `SOCK_STREAM` – TCP (reliable, connection-oriented). +- `SOCK_DGRAM` – UDP (connectionless, unreliable). +- `SOCK_SEQPACKET` – sequenced, reliable datagrams (less common). +- `SOCK_RAW` – raw access to IP packets (used in advanced networking). + +### **3. Socket System Calls** + +1. `int socket(int domain, int type, int protocol);` + - Create a new socket descriptor. +2. `int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);` + - Assign an address/port to a socket (server side). +3. `int listen(int sockfd, int backlog);` + - Mark socket as passive (ready to accept connections). +4. `int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);` + - Accept a new incoming connection (blocking call). +5. `int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);` + - Establish connection to a server (client side). +6. `ssize_t read(int sockfd, void *buf, size_t count);` +7. `ssize_t write(int sockfd, const void *buf, size_t count);` +8. `ssize_t recv(int sockfd, void *buf, size_t len, int flags);` +9. `ssize_t send(int sockfd, const void *buf, size_t len, int flags);` +10. `int close(int sockfd);` + - Close the socket and free resources. + +### **4. Socket Address Structures** + +- IPv4: `struct sockaddr_in` + + ```c + struct sockaddr_in { + sa_family_t sin_family; // AF_INET + in_port_t sin_port; // port number (network byte order) + struct in_addr sin_addr; // IP address + }; + ``` + +- IPv6: `struct sockaddr_in6` +- Generic: `struct sockaddr` for compatibility. + +### **5. Data Conversion Utilities** + +- `htons()`, `htonl()`: host to network byte order (short/long) +- `ntohs()`, `ntohl()`: network to host byte order +- `inet_pton()`: convert string IP to `struct in_addr` or `struct in6_addr` +- `inet_ntop()`: convert address structure to string + +### **6. TCP Client-Server Model** + +**Server:** + +1. `socket()` +2. `bind()` +3. `listen()` +4. `accept()` → handle client +5. `read()/write()` → communicate +6. `close()` + +**Client:** + +1. `socket()` +2. `connect()` +3. `read()/write()` → communicate +4. `close()` + +### **7. UDP Model** + +- Connectionless: no `listen()`/`accept()`. +- Use `sendto()` and `recvfrom()` for communication. +- No guarantee of delivery; suitable for lightweight or real-time protocols. + +### **8. Concurrency in Servers** + +- **Process-based**: `fork()` for each client +- **Thread-based**: `pthread_create()` for each client +- **I/O multiplexing**: `select()`, `poll()`, `epoll()` + +### **9. Error Handling** + +- Check return values of all socket calls. +- Use `perror()` or `strerror()` for diagnostics. +- Handle `EINTR` for interruptible syscalls. + +### **10. Key Takeaways** + +- Sockets abstract network communication using familiar file descriptor semantics. +- TCP ensures reliable, ordered delivery; UDP is fast but unreliable. +- Address conversions (`inet_pton`, `inet_ntop`) are essential for portability. +- Concurrency requires careful design: processes, threads, or event loops. +- Practice writing small client-server programs to solidify concepts. diff --git a/README.md b/README.md index 6ebb013..c2a25ae 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # 📚 Linux System Programming – Chapter Index Welcome! This is a collection of chapter summaries from the book **Linux System Programming** by Robert Love. Each chapter is organized in its own folder. +In the section extra there are other arguments take by ***Advanced Programming in the UNIX Enviroment*** by W. Richard Stevens. ## Available Chapters @@ -15,6 +16,10 @@ Welcome! This is a collection of chapter summaries from the book **Linux System - [Chapter 10 - Signals](10_Signals/README.md) - [Exercises](exercises/README.md) +## Extra (APUE) + +- [Chapter 16 - Network IPC: Sockets](16_NetworkIPCSockets/README.md) + > Each file contains an English summary of the chapter's key concepts. ## License