1. inet_ntoa( ) linux
- Posted by cense <cense at MAIL.RU> Nov 23, 2000
- 362 views
- Last edited Nov 24, 2000
hey all, i have one question about the C routine, inet_ntoa( ) in a Linux system. i am attempting to wrap this function nicely and here is what i have so far: -- include mixedlib.e global function inet_ntoa( ulong s_addr ) pointer in_addr_ptr, char_str sequence char_seq in_addr_ptr = struc( get_in_addr_seq( ), HIGH ) Sets( in_addr_ptr, "s_addr", s_addr ) char_str = c_func( inet_ntoa_, { in_addr_ptr } ) char_seq = str2seq( char_str ) frees( in_addr_ptr ) return char_seq end function The problem im having is what char_str points to after the call to inet_ntoa. I always get some randomish IP in dot-notation being returned with the two last sections always being ?.?.17.8. This seems rather odd to me. i know that the s_addr im passing is valid because it never changes value on connections made from the same client. localhost s_addr is always 16777343. I think this all has to do with the statically allocated char * that inet_ntoa returns. Does anyone have an idea? ive tried a lot of things and im really getting lost. Thanks for any help on this one. -- evil, corruption and bad taste ^[cense]
2. Re: inet_ntoa( ) linux
- Posted by Bernie <xotron at PCOM.NET> Nov 24, 2000
- 381 views
On Thu, 23 Nov 2000 21:35:28 -0700, cense <cense at MAIL.RU> wrote: cense: This is the correct code. -- Define ALL of your STATIC function,variable, or structure at the beginning -- of your program outside of your functions. -- STATIC means that a function,variable, or structure needs to be available -- through out the scope of your whole program any function or variable -- defined within a function is will be destroy when you leave the function. -- include mixedlib.e inet_ntoa_ = define_c_func(YOUR_LIB, "inet_ntoa",{C_POINTER}, C_POINTER) -- internet numeric to ascii function -- This function takes a 4 byte POINTER to a in_addr and converts -- the internet HOST numeric address to a STRING in the standard number/dots -- notation form. global function inet_ntoa( pointer sin_addr ) -- return str2seq( c_func( inet_ntoa_, { sin_addr_ptr } ) ) -- end function Bernie