Я хотел бы создать простой UDP-сервер, который может получать сообщения различной длины. Однако кажется, что D's Socket.receiveFrom()
ожидает массив буфера статической длины. Когда следующий код работает:Как использовать динамический массив для получения UDP в D?
void main() {
UdpSocket server_s;
Address client_addr;
ubyte[] in_buf;
ptrdiff_t bytesin;
server_s = new UdpSocket();
server_s.bind(new InternetAddress(InternetAddress.ADDR_ANY, PORT_NUM));
bytesin = server_s.receiveFrom(in_buf, client_addr);
if (bytesin == 0 || bytesin == Socket.ERROR) {
writeln("Error receiving, bytesin: ", bytesin);
return;
}
// Do stuff
}
receiveFrom()
сразу проваливается с bytesin == 0
. Почему это? Могу ли я использовать динамические массивы для приема UDP?
Спасибо, что делает. Должно было знать, что это именно то, для чего нужен битин. Это должно быть более хорошо документированное поведение в документации std.socket. Может быть, они должны создать версию, которая также распределяет динамически. – Nerve
В основе функций ОС требуется буфер, но они работают точно так же, как и эти. Делать это по-другому было бы возможно, но сложно, но при этом мало пользы ... Мне все же хотелось бы, чтобы документы стали лучше использовать его с большим количеством примеров. –
В принципе на любом языке вам необходимо выделить буферы перед получением. Также вы можете просто создать свою собственную функцию, которая сделает это. Я не вижу причины, чтобы он был частью библиотеки std. – Bauss