# How webMAN MOD Enables NETISO Server Functionality to Share PS3 Games Over LAN

> Discover how webMAN MOD enables NETISO server functionality using its built-in TCP server to share PS3 games over your LAN. Stream ISOs effortlessly and enhance your gaming experience.

- Repository: [Aldo Vargas/webman-mod](https://github.com/aldostools/webman-mod)
- Tags: how-to-guide
- Published: 2026-02-24

---

**WebMAN MOD enables NETISO server functionality by embedding a lightweight TCP server that listens on port 38008 and implements a custom binary protocol to stream ISO files over the local network when compiled with the `PS3NET_SERVER` flag.**

The aldostools/webman-mod repository includes a built-in NETISO server that transforms a PlayStation 3 into a network storage host, allowing other PS3 consoles on the same LAN to mount and launch games remotely. This functionality is implemented through conditional compilation, low-level socket programming, and a specialized command protocol that mirrors local file-system operations across the network.

## Compile-Time Activation with PS3NET_SERVER

The NETISO server is not included in all builds by default. Activation occurs at compile time through the **`PS3NET_SERVER`** macro defined in the project's flag headers.

In [`flags/flags_full.h`](https://github.com/aldostools/webman-mod/blob/main/flags/flags_full.h) (lines 40-47), the flag is enabled by default for full-featured builds:

```c
#define PS3NET_SERVER

```

For lighter builds, you must manually uncomment or add this definition in the appropriate flags file (e.g., [`flags/flags_lite.h`](https://github.com/aldostools/webman-mod/blob/main/flags/flags_lite.h)). When this macro is present, the preprocessor includes the server code blocks throughout the codebase, specifically within `#ifdef PS3NET_SERVER` conditional blocks in [`main.c`](https://github.com/aldostools/webman-mod/blob/main/main.c) and the network server headers.

## Network Socket Initialization

When webMAN MOD initializes via the `wwwd_start` routine in [`main.c`](https://github.com/aldostools/webman-mod/blob/main/main.c) (lines 187-199), the code enters a conditional compilation block that creates the listening socket for incoming NETISO connections.

The server performs the following initialization sequence:

```c
#ifdef PS3NET_SERVER
    active_socket[3] = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (active_socket[3] >= 0) {
        struct sockaddr_in sa = { .sin_family = AF_INET, .sin_port = htons(NETPORT) };
        bind(active_socket[3], (struct sockaddr *)&sa, sizeof(sa));
        listen(active_socket[3], NET_BACKLOG);
    }
#endif

```

Key implementation details include:

- **Port binding**: The server binds to **`NETPORT`** (defined as 38008)
- **Socket storage**: The listening socket descriptor is stored in `active_socket[3]`, reserved specifically for the PS3NETSRV slot
- **Backlog**: The listen queue is set to **`NET_BACKLOG`** (4 concurrent pending connections)

## Connection Handling and Threading

Once initialized, a dedicated thread named **`netiso_server_thread`** runs an infinite `accept()` loop to handle incoming client connections from other PS3 consoles.

According to the implementation in [`include/mount/netserver.h`](https://github.com/aldostools/webman-mod/blob/main/include/mount/netserver.h) (lines 9-13), each successful connection spawns a client handler:

- The main thread calls `accept()` on the listening socket
- Upon connection, it invokes **`handleclient_net()`**, a static helper function that manages the client lifecycle
- This architecture allows the server to handle multiple simultaneous clients, each with independent file access sessions

## NETISO Protocol and Command Dispatch

The NETISO protocol uses a compact binary format where clients send a **command ID** followed by a packed structure containing parameters. The `handleclient_net()` function in [`include/mount/netserver.h`](https://github.com/aldostools/webman-mod/blob/main/include/mount/netserver.h) (lines 62-71) acts as a protocol dispatcher, reading opcodes and routing requests to specific processing routines.

### File Operations

When a client requests to open a remote ISO, **`process_open_cmd()`** executes the following sequence:

1. Translates the virtual network path (e.g., `/net0/ISO/...`) to a physical PS3 path using `translate_path()`
2. Opens the file via `cellFsOpen` and obtains file size and modification time
3. Detects sector size for optical media emulation
4. Checks for multipart ISO files by looking for sequential extensions (`*.iso.0`, `*.iso.1`, etc.)
5. Stores the resulting file descriptor and metadata in a per-client `_client` structure

### Data Streaming

For read operations, **`process_read_file_critical()`** (lines 71-95) handles byte-range requests:

- Calculates the correct offset across multipart file boundaries
- Reads up to **`CLIENT_BUFFER_SIZE`** bytes from the local filesystem
- Transmits the data back to the client via `send()`

### Directory Enumeration

The **`process_read_dir_cmd()`** function (lines 415-485) builds directory listings by populating `netiso_read_dir_result_data` structures, allowing remote clients to browse the shared ISO directory tree before mounting specific images.

## Enabling and Using the NETISO Server

To activate the NETISO server functionality in your webMAN MOD build:

1. **Select the appropriate flag set**: Ensure `PS3NET_SERVER` is defined in your chosen flags header (typically [`flags/flags_full.h`](https://github.com/aldostools/webman-mod/blob/main/flags/flags_full.h))
2. **Compile the project**: Rebuild webMAN MOD with the flag enabled; the server code will be included in the resulting binary
3. **Automatic startup**: The server initializes automatically when the webMAN MOD plugin loads during PS3 boot
4. **Client configuration**: On the receiving PS3, enable NETISO in the webMAN menu and configure the server address pointing to `http://<SERVER_IP>:38008`

Once connected, the client PS3 treats the remote ISO as local optical media, enabling direct game launches over the network.

## Summary

- **webMAN MOD implements NETISO server functionality** through conditional compilation using the `PS3NET_SERVER` flag in headers like [`flags/flags_full.h`](https://github.com/aldostools/webman-mod/blob/main/flags/flags_full.h)
- **The server listens on TCP port 38008**, binding to `active_socket[3]` with a connection backlog of 4
- **A dedicated thread** (`netiso_server_thread`) accepts connections and spawns `handleclient_net()` handlers for each client
- **The binary protocol** supports file open, read, and directory enumeration commands via `process_open_cmd()`, `process_read_file_critical()`, and `process_read_dir_cmd()`
- **Multipart ISO support** allows the server to handle split game images (`.iso.0`, `.iso.1`) transparently across network boundaries

## Frequently Asked Questions

### What network port does the webMAN MOD NETISO server use?

The NETISO server binds to **port 38008** (defined as `NETPORT` in the source). This port is hardcoded in the socket initialization within [`main.c`](https://github.com/aldostools/webman-mod/blob/main/main.c) and must be accessible on your local network for client PS3 consoles to establish connections.

### How do I enable the NETISO server if it's missing from my webMAN MOD build?

You must **recompile webMAN MOD** with the `PS3NET_SERVER` flag defined in your flags header file (typically [`flags/flags_full.h`](https://github.com/aldostools/webman-mod/blob/main/flags/flags_full.h)). Standard or "lite" builds may exclude this feature to reduce memory footprint. Uncomment or add `#define PS3NET_SERVER` in the appropriate flags file and rebuild the package.

### Can the NETISO server stream multipart ISO files?

Yes. The server explicitly supports **multipart ISO files** through the `process_open_cmd()` function, which detects sequential file extensions (`.iso.0`, `.iso.1`, etc.) and manages offsets across multiple physical files. When a read request spans file boundaries, `process_read_file_critical()` calculates the correct offsets and seamlessly reads from the appropriate part file.

### Is the NETISO server always running once enabled?

The server starts **automatically when webMAN MOD loads** as a plugin during PS3 system initialization, provided the binary was compiled with `PS3NET_SERVER`. There is no manual activation required; the listening socket on port 38008 becomes active immediately after the `wwwd_start` routine completes socket binding in [`main.c`](https://github.com/aldostools/webman-mod/blob/main/main.c).