Ach, apologies - I forgot that addrinfo contains pointers. Ignore what I said :)
On Tuesday, October 4, 2016, Mike Ferenduros <[email protected]> wrote: > Swift won't mess with memory it does't own, and memory the addrinfo list > falls into that category. > > The addrinfo you're accessing through pointee is a struct which means > that when you assign it somewhere you get a *copy* of the thing pointed to. > Swift owns that copy and will manage it properly, and leave the original > alone. > > Fwiw, this is the wrapper I'm using for sockets right now: > https://github.com/mike-ferenduros/SwiftySockets > > > On Tuesday, October 4, 2016, Etan Kissling via swift-users < > [email protected] > <javascript:_e(%7B%7D,'cvml','[email protected]');>> wrote: > >> POSIX getaddrinfo allocates memory that must later be freed using >> freeaddrinfo. >> See http://manpages.ubuntu.com/manpages/xenial/en/man3/getaddrinfo.3.html >> >> To simplify the API, I've created this function: >> >> import Foundation >> >> enum SystemError: Swift.Error { >> case getaddrinfo(Int32, Int32?) >> } >> >> public func getaddrinfo(node: String?, service: String?, hints: >> addrinfo?) throws -> [addrinfo] { >> var err: Int32 >> var res: UnsafeMutablePointer<addrinfo>? >> if var hints = hints { >> err = getaddrinfo(node, service, &hints, &res) >> } else { >> err = getaddrinfo(node, service, nil, &res) >> } >> if err == EAI_SYSTEM { >> throw SystemError.getaddrinfo(err, errno) >> } >> if err != 0 { >> throw SystemError.getaddrinfo(err, nil) >> } >> defer { >> freeaddrinfo(res) >> } >> var result = [addrinfo]() >> var ai = res?.pointee >> while ai != nil { >> result.append(ai!) >> ai = ai!.ai_next?.pointee >> } >> return result >> } >> >> I don't feel that the function is correct, though. >> >> • How can the Swift memory model know that getaddrinfo allocates memory, >> and that Swift should not overwrite that memory with own stuff? >> • How can Swift know that freeaddrinfo deletes the whole list, and that >> it should copy out ai information that has been assigned to the result >> array? >> >> What's the correct way to interface with getaddrinfo? >> >> Thanks >> >> Etan >> >> >> _______________________________________________ >> swift-users mailing list >> [email protected] >> https://lists.swift.org/mailman/listinfo/swift-users >> >
_______________________________________________ swift-users mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-users
