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]> 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] <javascript:;> > https://lists.swift.org/mailman/listinfo/swift-users >
_______________________________________________ swift-users mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-users
