Тема: recvfrom(UDP) timeout
DWORD mil_sec = 300;
setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, (const char*)&mil_sec, sizeof(DWORD));
так вірно?А як повернути бескінечний час очікування? Нуль чи WSA_INFINITE ?
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → Системне програмування → recvfrom(UDP) timeout
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
DWORD mil_sec = 300;
setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, (const char*)&mil_sec, sizeof(DWORD));
так вірно?А як повернути бескінечний час очікування? Нуль чи WSA_INFINITE ?
Якщо ви пишете для Linux, то параметр SO_RCVTIMEO потребує вказівника на структуру struct timeval, а не DWORD, а якщо для Windows, то правильно.
так як переключитися на бескінечне очікування, 0 чи -1 згодувати в setsockopt ?
Ябзгодував 0, але очікування можливе лише в разі синхронних/блокованих сокетів, тож пересвідчитесь що сокет знаходиться саме в такому режимі.
Трошки не в тему, але код сервера на 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
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися