[swift-users] POSIX getaddrinfo memory behaviour
Mike Ferenduros
mike.ferenduros at gmail.com
Tue Oct 4 12:24:33 CDT 2016
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 <
swift-users at swift.org> 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
> swift-users at swift.org <javascript:;>
> https://lists.swift.org/mailman/listinfo/swift-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20161004/a9e474d8/attachment.html>
More information about the swift-users
mailing list