# yashaswinimullalli/simple_tcp_chat architecture

> Architecture diagram of the GitHub repository yashaswinimullalli/simple_tcp_chat, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/yashaswinimullalli/simple_tcp_chat
- Repository: https://github.com/yashaswinimullalli/simple_tcp_chat

## Overview

This repository is a Berkeley-sockets TCP chat server study with a cross-platform client and four runnable server implementations: a dual-console thread-per-client default, plus select-, thread-, and fork-based variants. Users connect with the client, send messages, and receive broadcasts from other clients; the default server can also broadcast console input. Each server is a standalone implementation rather than a shared pipeline. Relationships shown are supported by the README or sampled source; the comparison report is documentation, not a runtime subsystem.

Main entry points: [`client.c`](https://github.com/yashaswinimullalli/simple_tcp_chat/blob/main/client.c) (TCP Client), [`server_fork.c`](https://github.com/yashaswinimullalli/simple_tcp_chat/blob/main/server_fork.c) (Fork Server), [`server.c`](https://github.com/yashaswinimullalli/simple_tcp_chat/blob/main/server.c) (Message Broadcast), [`server_select.c`](https://github.com/yashaswinimullalli/simple_tcp_chat/blob/main/server_select.c) (Select Server)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Chat Client"]
  node_client_app["TCP Client<br/>[client.c]"]
end

subgraph group_default["Default Server"]
  node_default_listener["Default Listener<br/>[server.c]"]
  node_default_worker["Client Worker<br/>[server.c]"]
  node_default_broadcast["Message Broadcast<br/>[server.c]"]
  node_default_input["Console Input<br/>[server.c]"]
end

subgraph group_variants["Server Variants"]
  node_select_server["Select Server<br/>[server_select.c]"]
  node_thread_listener["Thread Listener<br/>[server_thread.c]"]
  node_thread_worker["Thread Worker<br/>[server_thread.c]"]
  node_thread_broadcast["Thread Broadcast<br/>[server_thread.c]"]
  node_fork_parent["Fork Server<br/>[server_fork.c]"]
  node_fork_child["Fork Client Handler<br/>[server_fork.c]"]
  node_shared_clients[("Shared Client Table<br/>[server_fork.c]")]
end

node_user(("Chat User"))

node_user -->|"enters messages"| node_client_app
node_client_app -->|"connects to"| node_default_listener
node_client_app -->|"connects to"| node_select_server
node_client_app -->|"connects to"| node_thread_listener
node_client_app -->|"connects to"| node_fork_parent
node_default_listener -->|"spawns per client"| node_default_worker
node_default_worker -->|"broadcasts messages"| node_default_broadcast
node_default_input -->|"broadcasts console input"| node_default_broadcast
node_default_broadcast -->|"sends messages"| node_client_app
node_select_server -->|"broadcasts messages"| node_client_app
node_thread_listener -->|"spawns per client"| node_thread_worker
node_thread_worker -->|"broadcasts messages"| node_thread_broadcast
node_thread_broadcast -->|"sends messages"| node_client_app
node_fork_parent -->|"forks handler"| node_fork_child
node_fork_parent -->|"registers sockets"| node_shared_clients
node_fork_child -->|"reads and removes sockets"| node_shared_clients
node_fork_child -->|"broadcasts messages"| node_client_app

click node_client_app "https://github.com/yashaswinimullalli/simple_tcp_chat/blob/main/client.c"
click node_default_listener "https://github.com/yashaswinimullalli/simple_tcp_chat/blob/main/server.c"
click node_default_worker "https://github.com/yashaswinimullalli/simple_tcp_chat/blob/main/server.c"
click node_default_broadcast "https://github.com/yashaswinimullalli/simple_tcp_chat/blob/main/server.c"
click node_default_input "https://github.com/yashaswinimullalli/simple_tcp_chat/blob/main/server.c"
click node_select_server "https://github.com/yashaswinimullalli/simple_tcp_chat/blob/main/server_select.c"
click node_thread_listener "https://github.com/yashaswinimullalli/simple_tcp_chat/blob/main/server_thread.c"
click node_thread_worker "https://github.com/yashaswinimullalli/simple_tcp_chat/blob/main/server_thread.c"
click node_thread_broadcast "https://github.com/yashaswinimullalli/simple_tcp_chat/blob/main/server_thread.c"
click node_fork_parent "https://github.com/yashaswinimullalli/simple_tcp_chat/blob/main/server_fork.c"
click node_fork_child "https://github.com/yashaswinimullalli/simple_tcp_chat/blob/main/server_fork.c"
click node_shared_clients "https://github.com/yashaswinimullalli/simple_tcp_chat/blob/main/server_fork.c"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_client_app,node_user toneBlue
class node_default_listener,node_default_worker,node_default_broadcast,node_default_input toneAmber
class node_select_server,node_thread_listener,node_thread_worker,node_thread_broadcast,node_fork_parent,node_fork_child,node_shared_clients toneMint
```

## Components

### Chat Client

- [TCP Client](https://github.com/yashaswinimullalli/simple_tcp_chat/blob/main/client.c): `client.c`

### Default Server

- [Default Listener](https://github.com/yashaswinimullalli/simple_tcp_chat/blob/main/server.c): `server.c`
- [Client Worker](https://github.com/yashaswinimullalli/simple_tcp_chat/blob/main/server.c): `server.c`
- [Message Broadcast](https://github.com/yashaswinimullalli/simple_tcp_chat/blob/main/server.c): `server.c`
- [Console Input](https://github.com/yashaswinimullalli/simple_tcp_chat/blob/main/server.c): `server.c`

### Server Variants

- [Select Server](https://github.com/yashaswinimullalli/simple_tcp_chat/blob/main/server_select.c): `server_select.c`
- [Thread Listener](https://github.com/yashaswinimullalli/simple_tcp_chat/blob/main/server_thread.c): `server_thread.c`
- [Thread Worker](https://github.com/yashaswinimullalli/simple_tcp_chat/blob/main/server_thread.c): `server_thread.c`
- [Thread Broadcast](https://github.com/yashaswinimullalli/simple_tcp_chat/blob/main/server_thread.c): `server_thread.c`
- [Fork Server](https://github.com/yashaswinimullalli/simple_tcp_chat/blob/main/server_fork.c): `server_fork.c`
- [Fork Client Handler](https://github.com/yashaswinimullalli/simple_tcp_chat/blob/main/server_fork.c): `server_fork.c`
- [Shared Client Table](https://github.com/yashaswinimullalli/simple_tcp_chat/blob/main/server_fork.c): `server_fork.c`

### Other components

- **Chat User**

## Connections

- Chat User → TCP Client: enters messages (evidence: `README.md`)
- TCP Client → Default Listener: connects to (evidence: `client.c`)
- TCP Client → Select Server: connects to (evidence: `client.c`)
- TCP Client → Thread Listener: connects to (evidence: `client.c`)
- TCP Client → Fork Server: connects to (evidence: `client.c`)
- Default Listener → Client Worker: spawns per client (evidence: `server.c`)
- Client Worker → Message Broadcast: broadcasts messages (evidence: `server.c`)
- Console Input → Message Broadcast: broadcasts console input (evidence: `server.c`)
- Message Broadcast → TCP Client: sends messages (evidence: `server.c`)
- Select Server → TCP Client: broadcasts messages (evidence: `server_select.c`)
- Thread Listener → Thread Worker: spawns per client (evidence: `server_thread.c`)
- Thread Worker → Thread Broadcast: broadcasts messages (evidence: `server_thread.c`)
- Thread Broadcast → TCP Client: sends messages (evidence: `server_thread.c`)
- Fork Server → Fork Client Handler: forks handler (evidence: `server_fork.c`)
- Fork Server → Shared Client Table: registers sockets (evidence: `server_fork.c`)
- Fork Client Handler → Shared Client Table: reads and removes sockets (evidence: `server_fork.c`)
- Fork Client Handler → TCP Client: broadcasts messages (evidence: `server_fork.c`)
