Hi,
I'm afraid I don't grock the documentation wrt. memory management of foreign bjects.
I really need a unix domain socket. Actually an abstract socket on Linux.
The example at at hand: a `struct sockaddr_storage`. That is, in general, any kind of C struct to allocate.
Likely I'm doing it all wrong. My great excuse(TM): I learned gambit's FFI from `gamsock` while adding domain socket support. No, Mam, it's not been me. ;-)
# Part I, the easy thing
(c-define-type socket-address (pointer (struct "sockaddr_storage") socket-address))
(c-lambda (...) socket-address "... ___result_voidstar = malloc(sizeof(struct sockaddr_storage))); ...")
That seems to work. But I'd bet this leaks memory as gamsock never frees this memory.
Q: Does it leak? Or is there some gambit magic default?
# Part II, the crazy thing
If I got that right, than what I'd need to fix the leak was to attach a /will/ to the socket-address, which would free the storage and return ___NO_ERR.
Q: Correct?
If yes, is this a good idea? I'd assume that allocating short lived objects from the Scheme heap should be much less expesive. Isn't it?
# Part III, how?
1. How would I allocate a short lived object on the scheme heap? 2. Still have it properly tagges as foreign object for type checking. (I.e., I know I could allocate a u8vector of the size I need. But this is an u8vector for Scheme, which I don't want.)
Thanks
/Jörg