как остановить функцию чтения ()? - PullRequest
0 голосов
/ 11 декабря 2011

Я пишу программы клиент-сервер UDP на C на Linux. Дело в том, что я должен добавить функцию проверки соединения. В справочных страницах Linux я нашел пример клиента UDP с этой функцией (http://www.kernel.org/doc/man-pages/online/pages/man3/getaddrinfo.3.html). Он использует функции записи / чтения для проверки ответа сервера. Я попытался применить его к моей программе, и это выглядит так:

char *test = "test";
nlen = strlen(test) + 1;
if (write(sock, test, nlen) != nlen) {              // socket with the connection
    fprintf(stderr, "partial/failed write\n");
    exit(EXIT_FAILURE);
}

nread = read(sock, buf, nlen);
if (nread == -1) {
    perror("Connection");
    exit(EXIT_FAILURE);
}

проблема в том, чем я запускаю программу с этим битом, когда сервер включен, он ничего не делает, кроме чтения бесконечного времени ввода, которое он тоже не использует. Я попытался убить прерывание (getpid (), SIGHUP), которое я нашел здесь, на другую похожую тему, и завершение работы (sock, 1), но, похоже, ничего не работает. Не могли бы вы рассказать мне, как остановить чтение ввода или любой другой возможный вариант, чтобы проверить, активен ли сервер udp?

1 Ответ

1 голос
/ 11 декабря 2011

Вы должны использовать асинхронное чтение.

Для этого вы должны использовать функцию select () из "sys / socket.h".

Функция контролирует дескриптор сокета на предмет изменений без блокировки.

Вы можете найти ссылку на него здесь или здесь или набрав "man select" в вашей консоли.

Существует пример здесь для Windows, но его использование очень похоже на UNIX.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...