• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[solved] socket klasse, gibts da schon was?

taki

Advanced Hacker
Welche Sprache?

In Perl gibt es ein brauchbares Socket-Objekt (s. "perldoc IO::Socket"). Für Ruby und Python gibt es da auch Objekte, da kenn ich mich aber noch gar nicht aus.

Für C++ gibt es sowas mit Sicherheit in unterschiedlichsten Ausprägungen, je nach verwendeten Bibliotheken (Z.B. Qt hat Objekte für die Arbeit mit Sockets, s. Qt-Referenz).
 
OP
M

mctwist

Newbie
hmmm. roischlisch spät für ne antwort, aber ich hab gerade mal alle meine posts durchgeschuat was es da so neues jibbet.

ich habe damals nach ner cpp klasse gesucht. hab inzwischen aber ne eigene geschrieben (im einsatz in einem webserver).

1. sorrey für sie ungenaue angabe (und das grässliche deutsch)
2. danke für die antworten (trotz der mehr als unterdurschnitlichen fragestellung).
 
Das man sich den ganzen Klassenkrams sparen kann, weil der genauso viele Codezeilen braucht wie ein Aufruf des Systemcalls.
 

oxe1976

Member
jengelh schrieb:
Das man sich den ganzen Klassenkrams sparen kann, weil der genauso viele Codezeilen braucht wie ein Aufruf des Systemcalls.

Naja, die Systemcalls sind schon ziemlich low-level, man muss sich um ne Menge parameter etc. kuemmern. Da geht es schon eleganter.
Mein Favorit waere hierfuer die asio library (Boost).

Die ist zudem auch noch portabel (im Gegensatz zu Systemcalls).
Anzahl der Codezeilen ist kein gutes Argument.

Gruss
 
LOC ist generell kein Argument, richtig. Hier aber schon:
Code:
int main(void)
{
        int fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        if (fd < 0)
                printf("Tja pech\n");
        close(fd);
}
vs.
Code:
class Socket {
    public:
        Socket(void);
        ~Socket(void);
    protected:
        int fd;
};
Socket::Socket(void)
{
        fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
}
Socket::~Socket(void)
{
        close(fd);
}
bool Socket::ok(void)
{
        return fd >= 0;
}
int main(void)
{
        Socket *s = new Socket();
        if (!s.ok)
                printf("Tja pech\n");
}
dann bringt diese Kapselung erstmal gar nix. Und Portabilit"at erreichst du auch, indem du bei Betriebssystemem, die nicht das BSD Socket API haben, einfach eine Extrabibliothek mit reinlinkst. Denn ob du nun socket() oder Socket::Socket() aufrufst - doch v"ollig egal.
 

oxe1976

Member
Das sind sicherlich Designentscheidungen, die von den Anforderungen abhaengen und generell zu sagen "ist doch egal was man nimmt" ist sicherlich nicht moeglich.

Dein Socket Beispiel sagt jedenfalls nicht viel aus, weil es darin nur um die Erzeugung eines sockets geht, i.d.R tut man aber mehr damit ... (bitte kein weiteres Code Beispiel)
Wenn aber nichts gegen eine C++ library spricht, die eine einfachere Benutzung ermoeglicht, dann benutzt ich doch lieber "Klassenzeugs".
Gibt viele guten Beispiele (siehe z.B. Boost libraries).

Aber da wir in diesem Fall die Anforderungen nicht kennen (um auf den Ursprung dieses Beitrags zurueckzukommen), belasse ich es mal dabei.

Gruss
 
Oben