Редактировать: проблема с IIS, а не с кодом Perl, который я использую. Кто-то еще говорил об этой проблеме здесь: https://stackoverflow.com/a/491445/1179075
Давний читатель здесь, первый раз.
Итак, я работаю над существующим кодом в Perl, который выполняет следующие действия:
- Создать сокет
- Отправить некоторые данные
- Закрыть розетку
- Возвращаться к 1, пока не будут отправлены все данные
Чтобы избежать затрат на создание и закрытие сокетов постоянно, я решил сделать это:
- Создать сокет
- Отправить некоторые данные
- Возвращаться к 2, пока не будут отправлены все данные
- Закрыть розетку
Дело в том, что отправляется только первая полезная нагрузка - все последующие игнорируются. Я отправляю эти данные в веб-службу .NET, а IIS вообще не получает эти данные. Каким-то образом сокет закрывается, и я понятия не имею, почему.
Вот скрипт, который я использую для проверки моих новых изменений:
use IO::Socket;
my $sock = new IO::Socket::INET(PeerAddr => $hostname, PeerPort => 80, Proto => "tcp", Timeout => "1000") || die "Failure: $! ";
while(1){
my $sent = $sock->send($basic_http_ping_message);
print "$sent\n";
sleep(1);
}
close($sock);
Так что это не работает - IIS получает только самый первый пинг. Однако если я переместлю присвоение $sock
и замыкание в цикле, IIS правильно получит каждый пинг.
Я просто неправильно использую сокеты или в IIS есть какие-то непонятные настройки, которые мне нужно изменить?
Спасибо!