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

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 (lines 40-47), the flag is enabled by default for full-featured builds:

#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). 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 and the network server headers.

Network Socket Initialization

When webMAN MOD initializes via the wwwd_start routine in 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:

#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 (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 (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)
  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
  • 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 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). 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.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →