1

Тема: recvfrom(UDP) timeout

DWORD mil_sec = 300;
        setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, (const char*)&mil_sec, sizeof(DWORD));

так вірно?А як повернути бескінечний час очікування? Нуль чи WSA_INFINITE ?

2

Re: recvfrom(UDP) timeout

Якщо ви пишете для Linux, то параметр SO_RCVTIMEO потребує вказівника на структуру struct timeval, а не DWORD, а якщо для Windows, то правильно.

Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»

3

Re: recvfrom(UDP) timeout

так як переключитися на бескінечне очікування, 0 чи -1 згодувати в setsockopt ?

4

Re: recvfrom(UDP) timeout

Ябзгодував 0, але очікування можливе лише в разі синхронних/блокованих сокетів, тож пересвідчитесь що сокет знаходиться саме в такому режимі.

Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»

5

Re: recvfrom(UDP) timeout

Трошки не в тему, але код сервера на Node JS. В своєму поточному проєкті я уживаю як ноду, так і чисті ся (в т.ч. для взаємодії по UDP протоколу), тож згадалося.

const dgram = require('dgram');
const server = dgram.createSocket('udp4');

server.on('error', (err) => {
  console.log(`server error:\n${err.stack}`);
  server.close();
});

server.on('message', (msg, rinfo) => {
  console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
});

server.on('listening', () => {
  var address = server.address();
  console.log(`server listening ${address.address}:${address.port}`);
});

server.bind(41234);
// server listening 0.0.0.0:41234
Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»