Tk fileevent не работает с сокетом в Windows - PullRequest
1 голос
/ 27 июля 2011

В последнее время я занимаюсь разработкой приложений с графическим интерфейсом для Windows с помощью Perl и Tk.В этой среде есть много неприятных вещей, которые прекрасно работают в Linux.Одним из самых раздражающих является то, что fileevent не работает.У меня есть сеанс Net :: Telnet, который я передаю fileevent, в Linux он работает нормально, в Windows обратный вызов никогда не вызывается.Я нашел несколько сообщений о монахах Perl, обсуждающих обходные пути, думаю, с опросом, это нежелательно.Во-первых, кто-нибудь знает, почему это не работает?Select поддерживает сокеты в Windows, я подозреваю, что использование select внутренне нет?

1 Ответ

1 голос
/ 28 июля 2011

Рэп на Windows заключается в том, что трудно реализовать неблокирующие сокеты.

В Unix вы можете вызвать $socket->blocking(0), и это все, что вам нужно сделать, чтобы убедиться, что чтение из вашего сокета не будет блокироваться, когда нет входных данных для чтения из них. В Windows это не работает, и вам нужно опросить их, чтобы убедиться, что там что-то есть, прежде чем читать.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...