powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / select
5 сообщений из 5, страница 1 из 1
select
    #33214384
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.

Есть TCP / IP сервер(Unix).
Клиентcкое приложение закрывает сетевое соединение.
Системный вызов select на сервере отлавливает это событие.
Дискриптор получен.
Каким образом можно определить факт закрытия сокета на клиенте
(валидность сокета).
Операции ввода вывода в этом месте производить нельзя.
По сему обработку ошибок на read,write,send,recv не предлагать.

Спасибо.
...
Рейтинг: 0 / 0
select
    #33214486
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если сокет уже закрылся - то любое обращение к нему приведет к ошибке.
Можно попробовать что-то безобидное типа getsockopt, getpeername или getsockname.
...
Рейтинг: 0 / 0
select
    #33214558
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--null--Если сокет уже закрылся - то любое обращение к нему приведет к ошибке.
Можно попробовать что-то безобидное типа getsockopt, getpeername или getsockname.

Thanks

Я уже выкрутился через ioctl вот так :
Код: plaintext
1.
2.
3.
4.
5.
int r_sz= 0 ;
if(res=ioctl(s_conn[i]->fds(), FIONREAD , &r_sz ) ==- 1 )
{
printf("socket %d error [%d] [%s]\n", i, errno, strerror (errno));
..........

возвращает

socket 0 error [22] [Invalid argument]


Если кото знает как получить более точную ошибку, колитесь,
думаю обществу пригодится.
...
Рейтинг: 0 / 0
select
    #33214829
miniСЛОН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
onstat-Если кото знает как получить более точную ошибку, колитесь,
думаю обществу пригодится.
через тот же селект, установив только fd_set* exceptfds. Если сокет отвалился будет exception
...
Рейтинг: 0 / 0
select
    #33214973
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще насколько я понимаю самые точные ошибки получают через
getsockopt() опцию SO_ERROR
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / select
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]