Вам нужно немного больше проверить протокол IRC;ваш сеанс IRC не считается подключенным (сервером) до тех пор, пока не будут выполнены определенные действия, которые сервер сообщит вашему клиенту об использовании кодов протокола IRC.И если сервер или сеть заняты при подключении, выполнение этих действий займет больше времени.
В этом случае попытка присоединиться к каналу до того, как сервер предоставит вам MOTD (сообщение дня)приведет к отключению сервером.Код конца протокола MOTD 376 и указывает, что последовательность подключения IRC закончена, и вы можете продолжить сеанс IRC, например: вводить команды (например, объединение).
Я бы предложил ввести цикл RECV и мониторингДанные, полученные с сервера для кода IRC 376 до того, как вы попытаетесь присоединиться к каналу, в Perl это будет выглядеть примерно так:
sub chan_join{
while(my $input = <SOCK>){
if($input =~ /376/){
my $talk = "JOIN $channel";
&send_data($talk);
&monitor;
}
else { print "$input"; }
}
}
Довольно бедно, но вы правильно поняли идею?(обратите внимание, что необходимо проверять 376 только один раз, когда вы видите, что вы подключены, и вам нужно только поддерживать соединение, отвечая на 'PING' сервера)