mirror of
https://github.com/rkd77/elinks.git
synced 2024-12-04 14:46:47 -05:00
fsp: Comments about interprocess communication.
This commit is contained in:
parent
e34d646f1a
commit
136ff42bb1
@ -64,7 +64,34 @@ struct module fsp_protocol_module = struct_module(
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
/* FSP synchronous connection management: */
|
/* Because functions of fsplib block waiting for a response from the
|
||||||
|
* server, and ELinks wants non-blocking operations so that other
|
||||||
|
* connections and the user interface keep working, this FSP protocol
|
||||||
|
* module forks a child process for each FSP connection. The child
|
||||||
|
* process writes the results to two pipes, which the main ELinks
|
||||||
|
* process then reads in a non-blocking fashion. The child process
|
||||||
|
* gets these pipes as its stdout and stderr.
|
||||||
|
*
|
||||||
|
* - If an error occurs, the child process writes "text/x-error"
|
||||||
|
* without newline to stderr, and an error code and a newline to
|
||||||
|
* stdout. The error code is either from errno or a negated value
|
||||||
|
* from enum connection_state, e.g. -S_OUT_OF_MEM. In particular,
|
||||||
|
* EPERM causes the parent process to prompt for username and
|
||||||
|
* password. (In this, fsplib differs from libsmbclient, which uses
|
||||||
|
* EACCES if authentication fails.)
|
||||||
|
*
|
||||||
|
* - If the resource is a regular file, the child process writes the
|
||||||
|
* estimated length of the file (in bytes) and a newline to stderr,
|
||||||
|
* and the contents of the file to stdout.
|
||||||
|
*
|
||||||
|
* - If the resource is a directory, the child process writes
|
||||||
|
* "text/html" without newline to stderr, and an HTML rendering
|
||||||
|
* of the directory listing to stdout.
|
||||||
|
*
|
||||||
|
* The exit code of the child process also indicates whether an error
|
||||||
|
* occurred, but the parent process ignores it. */
|
||||||
|
|
||||||
|
/* FSP synchronous connection management (child process): */
|
||||||
|
|
||||||
/* FIXME: Although it is probably not so much an issue, check if writes to
|
/* FIXME: Although it is probably not so much an issue, check if writes to
|
||||||
* stdout fails for directory listing like we do for file fetching. */
|
* stdout fails for directory listing like we do for file fetching. */
|
||||||
@ -249,7 +276,7 @@ prompt_username_pw(struct connection *conn)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* FSP asynchronous connection management: */
|
/* FSP asynchronous connection management (parent process): */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
fsp_got_error(struct socket *socket, struct read_buffer *rb)
|
fsp_got_error(struct socket *socket, struct read_buffer *rb)
|
||||||
|
Loading…
Reference in New Issue
Block a user