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