LINUX.ORG.RU

можно ли закрыть соединение не уничтожая сокет?


0

0

тут от нечего делать накодил демон,который каждые 10 сек делает коннект к разным веб серверам. если не удается подключится к 3 серверам, правится таблица роутинга. работает замечательно, НО при каждом коннекте приходится создавать сокет,присваевать ему опции и делать бинд() к ип!
как закрыть tcp соединение ,не закрывая дескриптор? чтобы не создавать его снова ,делать бинд и т.д.
так как девайс встроенный, хочется как можно большей экономии ресурсов :)

Re: можно ли закрыть соединение не уничтожая сокет?

2 shutdown, не?

DrLivsy
()

Re: можно ли закрыть соединение не уничтожая сокет?


AFAIU никак. shutdown(2) - это совсем не то.

// wbr

klalafuda ★☆☆
()

Re: можно ли закрыть соединение не уничтожая сокет?

Видимо, я не до конца проснулся. Какой bind для клиентского сокета? Может таки connect?

Кстати, да! connect есть, а disconnect для reusage отсутствует...хм. Я бы таки эмпирически опробовал shutdown старое соединение + connect к новому серверу. Если не сработает, то, скорее всего, нельзя.

farisey
()

Re: можно ли закрыть соединение не уничтожая сокет?

> Какой bind для клиентского сокета?

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

true_admin ★★★★★
()

Re: можно ли закрыть соединение не уничтожая сокет?

>В смысле для клиентского tcp-сокета.

с помошью bind() можно явно указать с какого ip делать connect(). это нужно, когда несколько интерфейсов с выходом в интернет.

>Проверял, не получается. EISCONN на втором connect'е.

аналогично.

Cosmicman ★★
() автор топика

Re: можно ли закрыть соединение не уничтожая сокет?

В винде есть такой api. Но там это имеет смысл, поскольку создание сокетов довольно затратно. Сомневаюсь, что в linux надо такие сложности. В любом случае это не переносимо. К тому же судя по описанию задачи - о производительности тут говорить вообще неуместно.

alex4
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.