Hi,
We can leave the red-herring io$m_nowait/ss$_suspend issue behind us; UCX
doesn't care if the NOWAIT is dropped from the OOB Read, so I'm willing to
concede that it was superfluous and may have only served to confuse
Multinet. (It seems it is impossible to do an asynchronous
<io$_readvblk!io$m_interupt> and have the completion AST *only* fire when
the OOB has arrived; if it's not there then ss$_badparam is returned) This
is great, I can work with this!)
The problem remains that after an interrupt has arrived and been read
sucessfully by a $qio <io$_readvblk!io$m_interrupt> *or* io$readvblk with P4
as ucx$c_msg_oob, the next setting of the OOB Attention AST
<io$_setmode!io$m_outband> completes immediately (next AST) with
ss$_badparam returned to the subsequent OOB read. (And the tight CPU loop
ensues)
Diagnosis: a) The successful read of the OOB character is not cleaning up
and resetting the OOB-present flag to say that it's gone or b) The
io$setmode!io$m_oobattn function is not seeing the flag after being reset.
I vote for a) 'cos I've done a $dclast to do the reset, in case AST
reentrancy issues were involved, and I've toggled between
<io$_readvblk!io$m_interrupt> and io$_readvblk + ucx$c_msg_oob and I just
don't have any levers left to pull :-(
I've got two sheep stations and an oil-rig that says Multinet is not
resetting the OOB flag after a succesful oob read; Let's see your cards! Any
chance someone's gonna fix this?
Nobody using OOB functionality with Multinet? No application development
with Multinet/ Just use the spoon-fed tools out of the box? If it ain't SSH
it just ain't? You really need UCX if you're serious about rolling your own?
Cheers Richard Maher
PS. I've also tried *not* resetting the OOB AST a second time to see if
Multinet is a set and forget type of thing, but then it only fires the once
(as documented).
PPS. I'm the guy that found the buffer-overflowing stack-corrupter that is
Multinet's io$_acpcontrol (at least for inetacp$c_trans
inetacp_func$c_gethostbyaddr).
PPPS. I still believe Multinet is trigger-happy with ss$_suspend leading it
to conceal a broken network connection when ss$_linkdiscon would be the
appropriate error status, but I'll have to change my OOBATTN testing to
READATTN testing and that issue isn't really bothering me anyway. (If I'm
wrong I will report back)
Post by Richard MaherHi,
This question's easier than the first one so please help if you've done
this. I'd simply like to see a $QIO _BG: driver example example of a server
(or client) receiving an OOB character (*NOT* IN-LINED) from their partner
and displaying it. I have code that works perfectly well on UCX and TCPware
but on Multinet the following happens: -
My <io$_setmode!io$m_outband> works and the AST fires as expected.
Then I go to read the OOB character with a $qio <io$_readvblk!io$m_nowait>
plus ucx$c_msg_oob as P4 - and the results I get vary from ss$_badparam to
ss$_suspended
So I say great, it was a false alarm and reset the OOBATTN AST which then
fires immediately and says "Nope there's definitely an OOB character here!
(It's just that we're not gonna let you read it, so loop around madly for a
while :-)"
Has anyone else experienced this or alternatively got a working example
they'd be willing to share?
Is the ss$_badparam really telling me there's a bad parameter and not just a
missing OOB?
Would a previous io$_sensemode have interfered with the sioatmark?
Is there some incantation or dead-chicken-waving such as
<io$_readvblk!io$m_nowait!io$m_interrupt> rather than using P4 flags?
(As a side issue and although I can't produce an example here, I am also
open to the idea that elsewhere Multinet will return a ss$_suspended to a
non-blocking read even if the pipe is broken, but that's one for another
day)
I must be doing something wrong but the fact that it's rockin' and rollin'
on UCX is a bit off-putting.
Thanks for any help.
Cheers Richard Maher
PS. Is it just me that thinks TCPware is a *whole* lot more UCX BG Driver
compatible than Multinet?
driver.
Post by David J DachteraWhen I try to set the Socket Option ucx$c_full_duplex_close (on its
own,
Post by Richard Maheror
Post by David J Dachterain the same call to create the socket) I get SS$_PROTOCOL returned.
This option is obviously available in UCX, and the TCPWare docs say it's
been supported for the last ten years but somehow it's never been
included
Post by David J Dachterawith Multinet. Is that correct? Is there a version later than 5.0 that
supports it?
I'm now having to code around the problem (by trying for FDC and if I
get
Post by David J Dachterass$_protocol then drop the option) but full_duplex_close is a pretty
damned
Post by David J Dachterauseful piece of functionality and I'm really curious as to the reasons
behind the lack of support or whether there are any plans to include
it
Post by Richard Maherin a
Post by David J Dachterafuture version?
I've cross-posted to the Multinet newsgroup. Perhaps someone from PSC will
respond.
--
David J Dachtera
dba DJE Systems
http://www.djesys.com/
Unofficial OpenVMS Marketing Home Page
http://www.djesys.com/vms/market/
http://www.djesys.com/vms/soho/
http://www.djesys.com/vms/ia32/
http://www.djesys.com/vms/support/