Сокет сервер в Русте не получает - PullRequest
0 голосов
/ 15 июня 2019

server.rs:

use std::net::UdpSocket;

fn main() -> std::io::Result<()>{
  {
    let mut socket = UdpSocket::bind("127.0.0.1:3000")?;
    let mut buf = [0; 10];
    let (amt, src) = socket.recv_from(&mut buf)?;

    let buf = &mut buf[..amt];
    buf.reverse();
    socket.send_to(buf, &src)?;
  }
  Ok(())
}

strace ./server здесь останавливается вывод:

<...>
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP) = 3
bind(3, {sa_family=AF_INET, sin_port=htons(3000), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
recvfrom(3, 

Попытки вызова echo -n "qwerty" | netcat 127.0.0.1 3000 после запуска вышеуказанной программы ничего не изменяют.

Почему?

1 Ответ

1 голос
/ 15 июня 2019

По умолчанию netcat использует TCP.Указание использовать netcat вместо UDP дает ожидаемый результат:

echo -n "qwerty" | netcat -u 127.0.0.1 3000

Вывод mcve:

/home/svetlin/.cargo/bin/cargo run --color=always --package mcve --bin mcve
    Finished dev [unoptimized + debuginfo] target(s) in 0.11s
     Running `target/debug/mcve`

Process finished with exit code 0
...