Как заставить 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

Другие вопросы по тегам