[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: ICMP socket with Gambas - working


On 6/30/25 4:22 AM, Benoît Minisini wrote:
It's because you used "Long" for SinAddr, whereas it must be "Integer". "Long" in Gambas is a 64-bit integer.

Every structure field is aligned to a memory address that is a multiple of the field size, but as the fields order is kept, some extra padding may be added between misaligned fields.

Moreover, the structure you must declare is actually "SockAddr_In", not "SockAddr". So:
(Yes, that is correct. I just didn't name it SockAddr_in as I was not aware of SockAddr at the time.)

Public Struct SockAddr_In
   SinFamily As Short
   SinPort As Short
   SinAddr As Integer
   _Padding[8] As Byte
End Struct

Because you have SockAddr_In6 too for IPV6, which is different, but both can be aliased to SockAddr which is declared that way:

Public Struct SockAddr_In
   SinFamily As Short
   _Padding[14] As Byte
End Struct

Thank you for taking the time to try clearing up my confusion, Benoît.

However, using Long for SinAddr was only my first attempt. I had read https://www.man7.org/linux/man-pages/man3/sockaddr.3type.html and thought I might be able to short-circuit the embedded in_addr structure. On 29 Jun 2025, I reported [1] that I had made changes in the code to use the following structure (which conforms to that man page):

Public Struct In_addr
  s_addr As Integer
End Struct

Public Struct Sockaddr_in
  sin_family As Short
  sin_port As Short
  sin_addr As Struct In_addr
End Struct

When I subsequently wrote about extraneous bytes, it was in the context of the above structures. (It's been a relatively busy thread, and I know you've been busy with personal things.)

I don't find sin_addr anywhere defined as an integer. `echo "#include <netinet/in.h>" | gcc -E -` shows it defined as a struct in_addr. So, it is indeed possible to short-circuit the embedded in_addr structure as I originally supposed?


[1] https://lists.gambas-basic.org/archive/user/2025-06/0000073.html


--
Lee

--- Gambas User List Netiquette [https://gambaswiki.org/wiki/doc/netiquette] ----
--- Gambas User List Archive [https://lists.gambas-basic.org/archive/user] ----


Follow-Ups:
Re: ICMP socket with Gambas - workingLinus <olivier.cruilles@xxxxxxxx>
Re: ICMP socket with Gambas - workingLee <t.lee.davidson@xxxxxxxxx>
References:
Re: ICMP socket with GambasLee <t.lee.davidson@xxxxxxxxx>
Re: ICMP socket with GambasLinus <olivier.cruilles@xxxxxxxx>
Re: ICMP socket with GambasLee <t.lee.davidson@xxxxxxxxx>
Re: ICMP socket with Gambasvuott@xxxxxxxxxxxx
Re: ICMP socket with GambasLee <t.lee.davidson@xxxxxxxxx>
Re: ICMP socket with Gambasvuott@xxxxxxxxxxxx
Re: ICMP socket with Gambas - workingLee <t.lee.davidson@xxxxxxxxx>
Re: ICMP socket with Gambas - workingBenoît Minisini <benoit.minisini@xxxxxxxxxxxxxxxx>