I can duplicate with your script on my mac
Thanks for taking time to reproduce.
This is probably something you should open an issue for
I was hoping I was wrong and missed something, but I guess I should indeed... I just opened this issue.
my guess is that hard-coded 256 should really be changed to maybe sizeof(struct tcp_info)
As far as I understand this code is responsible for all getsockopt calls, not just the calls for the TCP_INFO structure (for example on macOS one can also retrieve the TCP_CONNECTION_INFO structure using getsockopt...). So unless we are sure the TCP_INFO structure will always be the largest one, it would require checking the size of the requested structure, i.e. translating the getsockopt macro name to the actual C structure name to be able to compute the length, which seems quite complicated...
I guess adding an optional parameter to the getsockopt function to allow the calling code to override the default 256 max size would be ok though. Or the ugly way: simply doubling current limit and hoping all structures retrievable with getsockopt will always have a size below 512 ;) |