Я нашел старый код в Perl, который создает пакет для отправки в программу: исходный код. Соответствующая часть: [code]my $discovery_socket = IO::Socket::INET->new( Proto => 'udp', LocalAddr => '0.0.0.0', LocalPort => 3040, ) or die "Can't bind udp/3040: $!";
my $discovery_io = IO::Async::Socket->new( handle => $discovery_socket, on_recv => sub { my ($self, $dgram, $addr) = @_; my ($err, $hostname, $portname) = Socket::getnameinfo($addr); my (undef, undef, $seq) = unpack "ccna6xx", $dgram; print "Received identify with seq $seq from $hostname/$portname\n"; my $header = pack "ccna6xx", 0x5a, # magic 1, # identify reply $seq, "\x00\x24\x1d\x8b\x0e\x50"; my $identify = pack "nccccccC4C4C4a4a4a4a32", 1, 1, 1, 1, # uptime 1, # mode 0, # alert 4, # ip type 192, 168, 1, 3, # ip addr 255, 255, 255, 0, # netmask 192, 168, 1, 1, # gateway "\x01\x02\x03\x04", # app ver "\x01\x02\x03\x04", # boot ver "\x01\x02\x03\x04", # app ver "PL ETH/USB"; # name
send $discovery_socket, $header . $identify, 0, $addr; }, on_recv_error => sub { my ($self, $errno) = @_; die "recv error $errno on discovery"; } ); [/code] Я попытался воссоздать это с помощью следующей функции на C++ (плюс другой окружающий код, который, вероятно, не имеет отношения к делу: [code]void handle_receive(const boost::system::error_code& error, std::size_t bytes_transferred) { if (!error || error == boost::asio::error::message_size) { std::string hostname = remote_endpoint_.address().to_string(); unsigned short port = remote_endpoint_.port(); std::cout
Я нашел старый код в Perl, который создает пакет для отправки в программу:
исходный код.
Соответствующая часть:
my $discovery_socket = IO::Socket::INET->new(
Proto => 'udp',
LocalAddr => '0.0.0.0',
LocalPort => 3040,
) or die Can't bind udp/3040:...
perl 5.32.1 в Linux
Если я выполню системный вызов, который запускает команду в фоновом режиме, сохранится ли этот фоновый процесс после завершения сценария Perl? Например
system( rm -rf /disk/rm_this_big_dir >& /dev/null & );