私はソケットを持っていますsock
:
int sock = socket(...);
connect(sock, ...);
// or sock = accept(sock_listen, 0, 0);
そして、 、 、stdio
などでバッファリングされたリーダーとライターを使用できるように、fdopen で 2 回開きました。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);
しかし、私たちが知っているように、もし私がファイルなら、続いfclose
て aが呼び出され、失敗します。close
fclose
また、 のみを使用するclose
と、構造体のメモリFILE
がリークされます。
どうすれば正しく閉じることができますか?
アップデート:
fdopen
一度使うと"r+"
読み込みと書き込みが同じロックを共有しますが、送信と受信を除いて個別に動作します。