i had written this in one of my programs: invoke htons, ax i wrote ax because the Win32 API ref said the function took a 16bit number as argument. the above works on win95/98/98SE/ME but not on win2k. took me ages to spot that bug i'd tell ya!! now with invoke htons, eax im back on track ;)
Posted on 2001-04-11 08:30:00 by Zynaps
Does ME/98SE (and downgraders) support invoke htons,eax?
Posted on 2001-04-11 08:40:00 by JimmyClif
High, I use invoke htons,eax without any problem on Win98SE and Win2k. The function return value is a word in ax. Am I wrong ? Test
Posted on 2001-04-11 13:48:00 by Test Department
Nope, just checked it too. I used dword's too... Zynaps, dude! You better not get me off track or else ... erm.. d*mn! Where did that trout go? ;D
Posted on 2001-04-11 16:27:00 by JimmyClif
winsock will use only the lower 16-bit value: that's the interpretation of the C function prototype. But in practice, you have to push a dword on the stack: winsock will ignore the high word. I used to have exactly the same problem when I started winsock programming. I had to debug to see the code generated for pushing a 16-bit value on the stack. It' s ugly: MASM took the liberty to correct it for me but it did so with the wrong assumption. "invoke htons,ax" is transformed into:

push 00             ; 1 dword pushed on the stack
push ax              ; 1 word pushed on the stack
call htons
Posted on 2001-04-12 04:20:00 by Iczelion