Дескриптор сокета не будет использоваться повторно, пока вы его не закроете.
Предполагая, что мы говорим о TCP, тогда, если удаленная сторона закроет свою сторону отправки соединения, вы получите recv()
, возвращающий 0 байтов, чтобы сообщить вам об этом. Так как TCP поддерживает полузакрытые соединения, вы все равно сможете отправлять данные на удаленную сторону соединения (если ваш протокол уровня приложения создан таким образом), или вы можете принять тот факт, что удаленная сторона закрыта его отправляющая сторона в качестве указания на то, что вы должны сделать то же самое.
Вы используете shutdown()
, чтобы закрыть либо сторону отправки, либо сторону возврата, либо обе стороны соединения. Вы используете close()
, чтобы закрыть сокет и освободить дескриптор / дескриптор для повторного использования.
Итак, в ответ на ваш вопрос. Нет, вы не сможете принять другое соединение с тем же дескриптором сокета, пока не вызовете close()
для того дескриптора, который у вас уже есть.
Вы МОЖЕТЕ принять соединение по новому дескриптору сокета; но это, вероятно, не проблема для вас.