You can apparently change the time that a socket can remain in FIN_WAIT2 with a simple echo to /proc/sys/net/ipv4/tcp_fin_timeout. I'd be interested to know how POE handles a kernel reap of the socket.
I'm not sure I understand your question. Sockets in FIN_WAIT_2 have been closed at the application level. This often happens as a consequence of an IO::Handle object (or an instance of a subclass) being DESTROYed.
Please clarify:
What do you expect an application to do with a closed socket?
How do you expect an application to call methods on a DESTROYed IO::Handle object?
What kernel syscalls do you expect to work with closed file descriptors?