У меня есть гнездо sock
:Как правильно закрыть сокет, открытый с помощью fdopen?
int sock = socket(...);
connect(sock, ...);
// or sock = accept(sock_listen, 0, 0);
И я открыл ее fdopen в два раза, так что я могу использовать буферизованный читателя и писателя в stdio
, такие как fwrite
, fread
, fgets
и fprintf
.
FILE *f_recv = fdopen(sock, "wb");
FILE *f_send = fdopen(sock, "rb");
// some IO here.
close(sock);
fclose(f_recv);
fclose(f_send);
Но, как мы знаем, если I fclose
файлом, close
будет называться впоследствии, и fclose
потерпит неудачу.
И если я использую только close
, просочится память структуры FILE
.
Как его закрыть?
UPDATE:
Используйте fdopen
один раз "r+"
делает чтение и запись долю таким же замок, но кроме передачи и приема на работу в индивидуальном порядке.
Вы не открывали его дважды. Вы просто обмотали потоки STDIO вокруг него. Вам нужно закрыть их обоих по той причине, что вы дали. – EJP