Приветствую.
Очень непонятная проблема.
Буду благодарен если натолкнете на мысль.
my %params = (
lang => ru,
host => \'localhost\',
port => PORT,
@_);
my $len = length($word);
my $sock = IO::Socket::INET->new(
PeerAddr => $params{\'host\'},
PeerPort => $params{\'port\'},
Proto => \'tcp\');
unless ($sock) {
err2log( $errh . "Can not connect !");
return $word;
}
print $sock \'CLIL\' . $param{\'lang\'} . pack(\'i\', $len) . $word;
my @result;
my $answer;
while (read($sock, $answer, SIZE_OF_SIZE_T), $len=unpack(\'i\',$answer)) {
read($sock,$word,$len);
push @result,$word;
}
return @result ? $result[0] : $word;
Если кратко, то это предоставление программе spelld (mnogosearch), работающей в виде демона, слова для его морфологического анализа и поиска родственных словоформ.
На обоих машинах стоит Linux (RH Enterprise 3).
На той на которой Intel 32bit - код отрабатывает нормально.
Там где AMD64 - все отвисает на чтении из сокета (выявил после тщательной отладки):
read($sock, $answer, SIZE_OF_SIZE_T)
этот вызов ничего не возвращает (причем даже undef), и ничего не кладет в $answer
то есть на ней просто виснет скрипт, и висит пока процесс апач не вывалится в тайм-аут
В чем может быть причина?
Куда рыть?
В логах этого spelld ничего нет, и вообще непонятно как дальше проводить дебаг. Скомпилился он на AMD64 нормально, без проблем.