2012-03-21 2 views
0

У меня есть цикл while для повторного подключения к устройству. Проблема заключается в том, что каждый раз, когда она повторяет попытку, используется один и тот же дескриптор сокета (закрытие и открытие снова), это безопасно?Есть ли способ повторного использования сокетов в C++/Linux

while(retry) 
    create socket 
    read(use socket created before) 
    if read fails 
    close socket and retry 

Я хочу, чтобы новый сокет fd подключался к серверу и читал снова. Повторное использование одного и того же безопасного в случае, если чтение не сработало?

ответ

2

Если вы на самом деле close гнездо, то я бы предложил создать новый сокет, так как fd, используемый для описания сокета, теперь недействителен, поэтому повторное использование одного и того же файлового дескриптора может привести к ошибкам.

Обычно лучше закрыть старый и создать новый.

+0

Я закрываю сокет и создаю новый, но поскольку я закрыл say socket fd 'x', когда я пытаюсь создать новый сразу после этого, он дает мне «x» в качестве нового сокета fd. – maheshg

+0

@ user1035818 Это абсолютно нормально. Старый 'fd' и все связанные с ним вещи были выпущены обратно в ОС, поэтому, даже если номер, который вы получаете, тот же, что и новые ресурсы. – Karlson

+0

@ user1035818 Вопросы, связанные с: http://stackoverflow.com/questions/4160347/close-vs-shutdown-socket – Karlson

1

Поскольку вы вызываете bind или подключаетесь к сокету, вы не можете изменить адрес. , вы должны закрыть сокет и создать новый.

Смежные вопросы