Les tribulations d'un programmeur Linux dans la Sierra Apple

Magazine
Marque
GNU/Linux Magazine
Numéro
216
Mois de parution
juin 2018


Résumé
Après développement d'applications domotiques basées sur des échanges de datagrammes pour divers hôtes (Raspberry Pi, ESP-12, smartphone Android) et divers langages (C++, Python, Java), on finit par être confronté au portage de ces applications dans l'univers Apple ; il est alors naturel de se tourner vers le langage Swift et sa librairie « Foundation » (le langage Swift créé par Apple et rendu public en 2014 est passé en open source en décembre 2015).L'utilisation du protocole UDP conduit à mettre en œuvre les « CFSocket » de la libraire « Foundation » avec leur fonction de rappel (callback) associée pour la réception des datagrammes. On est alors amené à manipuler des pointeurs (UnsafePointer et autres variantes du langage Swift) vers divers objets ce qui n'est pas évident a priori. Cet article est destiné à faire partager ce retour d'expérience.

Les fonctions de la librairie Foundation permettant l'accès aux sockets sont en fait des enveloppes pour les fonctions de la librairie BSD. Ainsi on fera appel à la fonction CFSocketCreate() dont la signature est :

func CFSocketCreate(_ allocator: CFAllocator!, _ protocolFamily: Int32,_ socketType: Int32, _ protocol: Int32, _ callBackTypes: CFOptionFlags,_ callout: CFSocketCallBack!, _ context: UnsafePointer<CFSocketContext>!) -> CFSocket!

Pour réagir à des connexions entrantes, il faut lui associer une fonction de rappel (argument callout) qui doit satisfaire à la définition ci-dessous :

typealias CFSocketCallBack = (CFSocket?, CFSocketCallBackType, CFData?,UnsafeRawPointer?, UnsafeMutableRawPointer?) -> Void

Les pointeurs apparaissant dans cette signature peuvent référencer divers types d'objets suivant les options choisies (argument callBackTypes). Cet article a pour objectif d'illustrer les coercitions de pointeurs à utiliser dans l'implémentation de ce type de...

Cet article est réservé aux abonnés. Il vous reste 94% à découvrir.
à partir de 21,65€ HT/mois/lecteur pour un accès 5 lecteurs à toute la plateforme
J'en profite