我们有一个 gen_server 进程,它通过创建被动套接字池并将它们借给其他进程来管理客户端的被动套接字池。任何其他进程都可以借用套接字,使用套接字向服务器发送请求,通过 gen_tcp:recv 得到答复,然后将套接字释放给 gen_server 套接字池进程。
套接字池进程监视所有借用套接字的进程。如果任何借用的进程宕机,它会从它那里得到一个宕机信号:
handle_info({'DOWN', Ref, process, _Pid, _Reason}, State) ->
在这种情况下,我们想清空借来的套接字,并通过放回池中来重用它。问题是,在尝试使用 清空套接字gen_tcp:recv(Socket, 0, 0)
时,我们收到 inetealready
错误消息,这意味着recv
操作正在进行中。
所以问题是如何中断先前recv
的,成功地排空一个套接字,并为其他进程重用。
谢谢。