Course Outline

  1. Sockets
    • Creating datagram sockets
    • Receiving and sending data
    • Creating and accepting TCP connections
    • Closing sockets
    • Handling errors
  2. Handling more than one client in a simple way
    • Prefork model, as found in Apache
    • Forking a new process per client
    • Cleaning up after finished processes
    • Threads
    • Inetd, systemd units
  3. Waiting for data
    • Blocking sockets
    • Non-blocking sockets and select
    • Select as a way to wait for "any of these sockets"
  4. Organizing reads and writes
    • Dealing with short reads and writes
    • Reading up to a delimiter
    • Pipelined requests
    • Application-level buffers
  5. Event-driven architecture
    • Using select for multiplexing all client connections in one thread
    • State machines
    • Callback hell
    • Event libraries
    • "Green" threads
  6. Problem of 10000 connections
    • Problems with prefork model and select-based loop
    • poll as an alternative to select
    • Realtime signals and why you shouldn't use them
    • Epoll (linux) and kqueue (BSD)
    • Why and when epoll and kqueue are faster than poll/select
  7. Timeouts and timers
    • SIGALARM
    • Timeout as a select argument
    • A simple case of all-equal timeouts
    • Priority queue as an abstract data stracture
    • Binary heap as a priority queue implementation
    • Timer wheel
    • timerfd
  8. Integration with the operating system
    • Traditional daemons
    • Systemd socket activation
    • Logging
    • Handling signals
  9. Performance and scalability optimizations
    • Choosing the right architecture
    • Setting socket options

Requirements

  • C language
  • Linux user skills
 14 Hours

Number of participants


Price per participant

Testimonials (5)

Upcoming Courses

Related Categories