Я не знаю Perl, и я не использовал интерфейс Perl MQSeries, но читая справку здесь , он говорит следующее: -
Значение $ ConnectOpts является ссылкой на хеш, ключи которой соответствуют полям структуры MQCO. Это только входное значение.
С помощью $ ConnectOpts могут быть предоставлены две внутренние структуры данных: ClientConn и SSLConfig. Они обеспечивают доступ к опциям MQCNO и MQSCO.
Это, к сожалению, не очень полезно, так как нет такой вещи, как структура MQCO. Я думаю, что это может означать MQCNO. Затем, когда в нем говорится, что ClientConn предоставляет доступ к структуре MQCNO, я думаю, что это может означать структуру MQCD, которая подвешена к структуре MQCNO (поскольку именно так выглядит содержимое ClientConn).
Ваш вопрос сводится к тому, "где я могу поставить флажки опций MQCNO_ *?" и я не думаю, что ответ заключается в том, чтобы поместить их в структуру MQCD ClientConn, поскольку это не то место, где они находятся в собственном API MQ.
Учитывая, что я не знаю, как программировать на Perl, и просто использую свой опыт MQ в этом, я думаю, что код должен выглядеть следующим образом. Я заранее прошу прощения, если он не скомпилируется, но я надеюсь, что это приведет вас к решению. Пожалуйста, не стесняйтесь редактировать мой ответ, если он близок, но не совсем правильно из-за моих недостатков в Perl.
sub connectToQueuemanager
{
my ($host, $queuemanager, $channel) = @_;
my $coption = {
'ChannelName' => $channel,
'TransportType' => 'TCP',
'ConnectionName' => $host
};
my $compcode = 0;
my $compres = 0;
my $hconn = MQCONNX ($queuemanager, {'ClientConn' => $coption,
'Options' => MQCNO_HANDLE_SHARE_NO_BLOCK},
$compcode, $compres);
}