use new IO::Socket::Timeout
re-implement timeout based on new IO::Socket::Timeout