Как заставить poll() к ошибке
Я пытаюсь проверить сценарий в моем коде, когда poll () возвращает ошибку. Но я не знаю, как заставить poll () возвращать ошибку. Я попытался заблокировать poll () на неопределенный срок и попытался отправить SIGINT, но это просто остановило процесс.
Есть ли способ получить poll (), чтобы вернуть ошибку?
Благодарю.
2 ответа
Есть ли способ получить poll(), чтобы вернуть ошибку?
Возможно, с некоторыми ошибками, но существует ряд потенциальных ошибок. Вообще не poll()
конкретный подход следует.
Иногда тестовый код должен внедрить ложную ошибку с альтернативным кодом.
Правильность этого общего подхода сильно зависит от кода и целей тестирования.
int poll_result = poll(&fds, nfds, timeout);
#if TEST1
if (poll_result != -1) {
// Avoid using rand()
static unsigned seed = 0;
seed = (16807 * seed) mod 2147483647; // https://stackru.com/a/9492699/2410359
if (seed % 97 == 0) { // about 1% of the time
// adjust as desired, e.g. EINVAL may not make sense here.
int faults[] = { EFAULT, EINTR, EINVAL, ENOMEM };
const unsigned n = sizeof faults / sizeof faults[0];
errno = faults[seed % n];
poll_result = -1;
}
}
#endif
...
poll()
см. раздел примечаний о EAGAIN, EINTR
,
Конечно, использование альтернативного кода может скрыть проблему, которая возникает только с истинным кодом.
Попробуйте проверить: https://linux.die.net/man/3/poll или попробуйте проверить http://man7.org/linux/man-pages/man2/poll.2.html