Отмените получение UDP из C на Unix - PullRequest
0 голосов
/ 16 марта 2010

Я только начинаю изучать, как работает сетевое программирование на C, и я написал небольшую программу, которая отправляет сообщения в терминал UNIX и из него. Я использую pthreads в своей программе, одна из которых, по сути, просто ждет recvfrom(), чтобы получить сообщение.

Однако я хочу иметь возможность правильно закрывать все потоки, если пользователь решит выйти из программы. Как я сейчас это настроил, другой поток просто отменяет поток, ожидающий на recvfrom, но я беспокоюсь, что это может быть плохой идеей, так как я оставляю сокеты незакрытыми и не освобождаю всю память выделяется.

Есть ли способ отменить recvfrom() вызов или какой-либо способ запустить определенную процедуру после отмены pthread?

Спасибо.

Ответы [ 2 ]

1 голос
/ 16 марта 2010

Другой подход - поддерживать список открытых соединений, совпадающих с идентификаторами потоков. Затем, когда вы отменяете поток, просматривайте список, чтобы найти его сокет, и вызывайте close для сокета.

1 голос
/ 16 марта 2010

Если вы используете pthread_kill для отправки сигнала в поток, recvfrom() должен вернуть -1 с errno, установленным на EINTR - вы можете проверить состояние «приложение сейчас выходит» и завершить грациозно.

...