Рэп на Windows заключается в том, что трудно реализовать неблокирующие сокеты.
В Unix вы можете вызвать $socket->blocking(0)
, и это все, что вам нужно сделать, чтобы убедиться, что чтение из вашего сокета не будет блокироваться, когда нет входных данных для чтения из них. В Windows это не работает, и вам нужно опросить их, чтобы убедиться, что там что-то есть, прежде чем читать.
В дополнение к опросу, другой обходной путь, который я видел, - это вызов ioctl($socket,0x8004667e,1)
для вашего дескриптора сокета, где 0x8004667e - это магическое число для включения неблокирующего поведения в сокетах Windows. Я имел смешанный успех с этим и не знаю, какие непредвиденные последствия могут быть применены к сокету Net::Telnet
.