Handle für eigene API erstellen



  • Hallo Leute,

    ich habe ein existierendes C-Programm und möchte eine Socket-ähnliche API dafür schreiben. So soll sie aussehen:

    int socket(int domain, int type, int protocol);
    send(int sockfd);
    recv(int sockfd);
    close(int sockfd);
    

    Ich weiss nicht wie ich in der socket()-Funktion das int-Handle erstellen soll, das zurückgegeben werden soll. Momentan sieht es so aus:

    typedef struct
    {
    	int domain;
    	int type;
    	int protocol;
    } mysock;
    
    mysock newsock;
    
    int socket(int domain, int type, int protocol);
    {	
    	newsock.domain = domain;
    	newsock.type = type;
    	newsock.protocol = protocol;
    	return (int) &newsock;
    }
    

    Also ich erstelle eine globale Variable meiner Struktur mysock. Das ist schlecht, da nun jeder neue Aufruf von socket() alte Werte überschreibt. Das Problem hört sich sehr einfach an, ich weiss aber nicht wie ich das Handle sonst erstellen kann. Bin noch ziemlich neu in C, also ich bin mir nicht mal sicher ob es üblich ist, dass ein Handle ein Pointer auf eine Stuktur ist.

    In einer objektorientierten Sprache würde ich hier einfach ein neues Objekt erstellen.

    Wisst ihr wie man so ein Handle erstellt?

    Viele Grüße



  • entweder du verwendest ein globales Array von deinen Sockets, dann könntest dud en Index als Handle verwenden (wie es wahrscheinlich auch bei Windows mit Resourcen intern gemacht wird...)

    oder du gibst wie in deinem Beispiel die Adresse zurück, verwendest aber malloc um
    dynamisch einen Socket zu erstellen.
    in deiner close Funkion gibst du den dann wieder mit free frei.



  • Danke!

    Das war genau das, was ich brauche 🙂


Log in to reply