Как закрыть сокет (), если я использовал fdopen() в дескрипторе сокета
Если я создаю сокет
sockfd = socket(...);
а затем я связываю его с потоком FILE, вызывая
FILE* f=fdopen(sockfd,"r+");
Должен ли я позвонить обоим close(sockfd);
а также fclose(f);
или только close(sockfd);
? Что происходит со структурой ФАЙЛ, если я позвоню или нет fclose(f)
?
И (самое главное), если я должен назвать их обоих, в каком порядке они должны быть вызваны? Первый close()
или же fclose()
?
1 ответ
fdopen()
оборачивает дескриптор файла в буферизованный io FILE
структура, как вы открыли fopen()
,
Вы должны только позвонить fclose()
это закроет дескриптор файла os и освободит все связанные структуры и буферы!