Вы хотите, чтобы fcntl()
проверил настройки чтения / записи на fd:
#include <unistd.h>
#include <fcntl.h>
int r;
r = fcntl(fd, F_GETFL);
if (r == -1)
/* Error */
if (r & O_RDONLY)
/* Read Only */
else if (r & O_WRONLY)
/* Write Only */
else if (r & O_RDWR)
/* Read/Write */
Но это отдельная проблема, когда сокет больше не подключен. Если вы уже используете select()
или poll()
, то вы почти на месте. poll()
вернет статус, если вы укажете POLLERR
в events
и проверите его в revents
.
Если вы делаете нормальный блокирующий ввод / вывод, то просто обрабатывайте ошибки чтения / записи по мере их появления и корректно восстанавливайте.