Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

закрытие сокета ( unix )

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Сети
Предыдущая тема :: Следующая тема  
Автор Сообщение
phil



Зарегистрирован: 24.08.2003
Сообщения: 32
Откуда: Санкт-Петербург

СообщениеДобавлено: Вс Авг 24 2003 18:19    Заголовок сообщения: закрытие сокета ( unix ) Ответить с цитатой

Есть, к примеру, такой код:

...
s1 = accept( s, NULL, NULL );
s2 = dup( s1 );
shutdown( s1, SHUT_RDWR );
close( s1 );
...

Вопрос вот в чем - почему после закрытия s1 нельзя обращаться к s2? Что при этом происходит?

Как я думаю, мы в shutdown просто закрываем канал, а толку от dup-енного дескриптора, если обращаться не к чему. Я прав?

Заранее спасибо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
and3008



Зарегистрирован: 12.10.2001
Сообщения: 14893
Откуда: Н.Новгород

СообщениеДобавлено: Вс Авг 24 2003 19:57    Заголовок сообщения: Re: закрытие сокета ( unix ) Ответить с цитатой

Я маленько не понял кода, но что-то мне подсказывает, что тебе нужна копия некого экземпляра объекта.
Так?

Ды делаешь его дубликат, потом уничтожаешь источник и не можешь обращаться к копии?

Все в общем-то логично. Вероятнее всего dup возвращает только ссылку на объект, а не сам объект. При уничтожении объекта теряет смысл обращаться к нему по ссылке, т.к. сам объект уничтожен и память освобождена. Любая приличная ОС при попытке обращения "не туда" выкидывает всех "желающих" из ОЗУ.

Ход мысли ясен?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
phil



Зарегистрирован: 24.08.2003
Сообщения: 32
Откуда: Санкт-Петербург

СообщениеДобавлено: Вс Авг 24 2003 21:44    Заголовок сообщения: Re: закрытие сокета ( unix ) Ответить с цитатой

Код, подобный этому должен выполняться на сервере. Т.е делаем дупликат дескриптора, а сам дескриптор закрываем и продолжаем принимать подключения.
Получается, что shutdown там быть не должно, так?

Все это происходит в Линухе.

2 and3008: ну да, все вроде так. Просто интересно, что в действительности происходит. Может, знаешь куда смотреть в исходники оси, где это все?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
and3008



Зарегистрирован: 12.10.2001
Сообщения: 14893
Откуда: Н.Новгород

СообщениеДобавлено: Вс Авг 24 2003 22:24    Заголовок сообщения: Re: закрытие сокета ( unix ) Ответить с цитатой

Где смотреть - не знаю.
Что происходит поясню.

Открывая дескриптор мы объяснем системе, что вот тут есть процесс, который отвечает за этот самый дескриптор.

Функция dup позволяет создать дополнительный указатель на дескриптор. Ну вроде как записать указатель на дескриптор в другую переменную. За истинность этого отвечать не берусь, но думаю что все именно так и происходит.

Закрыв дескриптор мы утрачиваем возможность работать с дескриптором и все указатели на него становятся недействительными.

Что же делать? Объясни что надо и желательно по-подробнее. Думаю решение лежит на поверхости, надо только взглянуть на проблемму под другим углом зрения. Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
phil



Зарегистрирован: 24.08.2003
Сообщения: 32
Откуда: Санкт-Петербург

СообщениеДобавлено: Пн Авг 25 2003 01:26    Заголовок сообщения: Re: закрытие сокета ( unix ) Ответить с цитатой

На самом деле просто не надо использовать shutdown, и все.
Попробую сам поискать исходники - а то на словах-то оно конечно понятно, а что там на самом деле - неясно. Я тоже так думаю ( про дескриптор ) - уже писал.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Сети Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...