クライアント側でパッシブ ソケットのプールを作成し、他のプロセスに借用することでそれらのプールを管理する gen_server プロセスがあります。他のプロセスは、ソケットを借用し、ソケットを使用してサーバーに要求を送信し、gen_tcp:recv を介して応答を取得し、ソケットを gen_server ソケット プール プロセスに解放できます。
ソケット プール プロセスは、ソケットを借用するすべてのプロセスを監視します。借用したプロセスのいずれかがダウンしている場合、そこからダウン シグナルを受け取ります。
handle_info({'DOWN', Ref, process, _Pid, _Reason}, State) ->
この場合、借用したソケットを空にし、プールに戻して再利用します。問題は、 を使用してソケットをドレインしようとすると、操作が進行中であることを意味するgen_tcp:recv(Socket, 0, 0)
inetealready
エラー メッセージが表示されることです。recv
したがって、問題は、前recv
の を中断し、ソケットを正常にドレインし、他のプロセスに再利用する方法です。
ありがとう。