The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"если прибить процесс с сокетом."
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"если прибить процесс с сокетом."
Сообщение от vvk emailИскать по авторуВ закладки on 29-Мрт-03, 09:26  (MSK)
вот такой вопрос. если я из своей проги создаю процесс (fork()) и там работаю с сокетами, а потом эта самая прога решает, что то, что там посылается, уже никому не надо, и надо посылать другое. что если я прибью этот процесс с помощью kill? сокет закроется, или болтаться будет незакрытый? где то слышал, что бывает ограничение на количество открытых сокетов.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "если прибить процесс с сокетом."
Сообщение от Max Zinal emailИскать по авторуВ закладки on 29-Мрт-03, 20:39  (MSK)
>вот такой вопрос. если я из своей проги создаю процесс (fork()) и
>там работаю с сокетами, а потом эта самая прога решает, что
>то, что там посылается, уже никому не надо, и надо посылать
>другое. что если я прибью этот процесс с помощью kill? сокет
>закроется, или болтаться будет незакрытый? где то слышал, что бывает ограничение
>на количество открытых сокетов.

Сокеты - штука хитрая. После киляния процесса сокеты вроде как
освобождаются, за исключением одного скромного, но чертовски
важного момента: есть некое количество таймаутов, которые
должно выдерживать ядро, дабы обеспечить надёжную доставку
в соответствии с TCP-протоколом. Пример - состояние CLOSE_WAIT.
Так что реальное закрытие сокетов может произойти не сразу,
в течение 2-5 минут после убиения процесса либо выполнения
в оном процессе close() (без разницы, чего именно).

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "если прибить процесс с сокетом."
Сообщение от XMan emailИскать по авторуВ закладки on 30-Мрт-03, 20:23  (MSK)
Помимо ответа Max Zinal есть еще момент. Если ты открыл сокет, а потом сделал fork(), то сокет будет открыт и в потомке и в родителе. И пока ты не закроешь его и тут и там, он считается открытым.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "если прибить процесс с сокетом."
Сообщение от igor emailИскать по авторуВ закладки on 31-Мрт-03, 14:44  (MSK)
>Помимо ответа Max Zinal есть еще момент. Если ты открыл сокет, а
>потом сделал fork(), то сокет будет открыт и в потомке и
>в родителе. И пока ты не закроешь его и тут и
>там, он считается открытым.
а может, наоборот, когда закроешь в одном потоке, во втором сокет будет недоступен?


  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "если прибить процесс с сокетом."
Сообщение от XMan emailИскать по авторуВ закладки on 31-Мрт-03, 15:13  (MSK)
Не путай потоки ( pthread_create(...) ) и процессы ( fork() ) :)

Живой пример - любой TCP-ссервер, который принимает запрос на соединение, получает новый дескриптор сокета, порождает потомок-процесс, закрывает новый дскриптор и ждет следующего соединения. При этом потомок продолжает работать с клиентом.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "если прибить процесс с сокетом."
Сообщение от vvk emailИскать по авторуВ закладки on 01-Апр-03, 12:27  (MSK)
сокет я открываю после fork(), поэтому такой вопрос не возникает.

>Помимо ответа Max Zinal есть еще момент. Если ты открыл сокет, а
>потом сделал fork(), то сокет будет открыт и в потомке и
>в родителе. И пока ты не закроешь его и тут и
>там, он считается открытым.


  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру