File: stream.rs

package info (click to toggle)
rust-interprocess 2.2.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,016 kB
  • sloc: makefile: 2
file content (43 lines) | stat: -rw-r--r-- 1,886 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
//{
fn main() -> std::io::Result<()> {
    //}
    use {
        interprocess::local_socket::{prelude::*, GenericFilePath, GenericNamespaced, Stream},
        std::io::{prelude::*, BufReader},
    };

    // Pick a name.
    let name = if GenericNamespaced::is_supported() {
        "example.sock".to_ns_name::<GenericNamespaced>()?
    } else {
        "/tmp/example.sock".to_fs_name::<GenericFilePath>()?
    };

    // Preemptively allocate a sizeable buffer for receiving. This size should be enough and
    // should be easy to find for the allocator.
    let mut buffer = String::with_capacity(128);

    // Create our connection. This will block until the server accepts our connection, but will
    // fail immediately if the server hasn't even started yet; somewhat similar to how happens
    // with TCP, where connecting to a port that's not bound to any server will send a "connection
    // refused" response, but that will take twice the ping, the roundtrip time, to reach the
    // client.
    let conn = Stream::connect(name)?;
    // Wrap it into a buffered reader right away so that we could receive a single line out of it.
    let mut conn = BufReader::new(conn);

    // Send our message into the stream. This will finish either when the whole message has been
    // sent or if a send operation returns an error. (`.get_mut()` is to get the sender,
    // `BufReader` doesn't implement pass-through `Write`.)
    conn.get_mut().write_all(b"Hello from client!\n")?;

    // We now employ the buffer we allocated prior and receive a single line, interpreting a
    // newline character as an end-of-file (because local sockets cannot be portably shut down),
    // verifying validity of UTF-8 on the fly.
    conn.read_line(&mut buffer)?;

    // Print out the result, getting the newline for free!
    print!("Server answered: {buffer}");
    //{
    Ok(())
} //}