             /// TODO: reinterpret the in-memory values as the rt_msghdr2 type in a SAFE WAY
             
             let routingMessage = unsafeBitCast(routingMessageBuffer.self, to: UnsafeMutablePointer<rt_msghdr2>.self)
-            routes.append(RoutingMessage(routingMessage))
+            
+            do {
+                let routingMessageValue = try RoutingMessage(routingMessage)
+                routes.append(routingMessageValue)
+            }
+            catch let error {
+                print("Failed to create RoutingMessage. Error was:\n\(error)")
+            }
             
             let routingMessageSize = Int(routingMessage.pointee.rtm_msglen)
             routingMessageBuffer = routingMessageBuffer.advanced(by: routingMessageSize)

import PeterParkerPrivate.ifaddrs
import PeterParkerPrivate.net_route


extension RoutingMessage {
    public init(_ routingMessage: UnsafeMutablePointer<rt_msghdr2>) {
        
        /// WARNING: unsafeBitCast(_:to:) is very dangerous!
        /// Read more here: https://swift.org/migration-guide/se-0107-migrate.html

        
        let buffer = unsafeBitCast(routingMessage.self, to: UnsafeMutablePointer<UInt8>.self)
        let routingMessageSize: CUnsignedShort = routingMessage.pointee.rtm_msglen
        guard routingMessageSize > 0 else {
            throw RoutingMessageError.zeroRoutingMessageSize
        }
        let firstRoutingAddressPtr = buffer.advanced(by: MemoryLayout<rt_msghdr2>.stride)
        let firstRoutingAddress = unsafeBitCast(firstRoutingAddressPtr.self, to: UnsafeMutablePointer<sockaddr>.self)
        let routingAddressesCount = (Int(routingMessageSize) - MemoryLayout<rt_msghdr2>.size) / MemoryLayout<sockaddr>.size
