3.1.5.1 Processing I/O Requests and Responses

This protocol connects server-based applications and client file systems such that each component is unaware of the other's local location, as specified in section 1.3. This protocol forwards server requests from the server-based application and returns replies from the client-file system. There are no specific rules implied by this protocol as to how and when a particular message is sent from the server and what the client is to reply. The rules enforced by this protocol are described by the ClientId, CompletionId, DeviceId, and FileId fields, as specified in the Abstract Data Model (section 3.1.1) and the processing instructions that follow.

There are several types of I/O requests, as specified in section 2.2.3.3. Each request is identified by its unique CompletionId and DeviceId. For each request, there is a corresponding reply, as specified in section 2.2.3.4. The CompletionId and DeviceId in the response MUST match the CompletionId and DeviceId of the request.

Each request is always initiated from the server's driver, and then sent to the client. The relevant fields for each request are retrieved from the driver. The client forwards the request to the client driver. When the request completes, the client sends an I/O response that contains the output of the request. The response is matched to its request by the DeviceId and CompletionId fields; that is, those fields MUST match.

In case of sudden termination of the underlying transport, all outstanding requests against the file system drivers are completed on both sides.