Struktur initialisieren....
-
SeppJ schrieb:
Was verstehst du unter 'korrekt', was sind die ganzen Datentypen genau und was soll an einem struct anders sein als an anderen Datentypen?
Na, die WinAPI Sockets wirste doch kennen? Oder meinst du die ganzen anderen Member die er wahrscheinlich hat?
JA, wenn du in der richtigen Reihenfolge alle Member mit der Initialisierungsliste richtig initialisierst (oder zumindest in jedem Konstruktor selbst), ist das in Ordnung. C++11 unterstützt auch delegation für Konstruktoren, d. h. das dürfte bei mehreren Konstruktoren noch einfacher werden.
Fragt sich nur, was "richtig" heißt, hm? Zeig doch noch einmal alles.
-
Default-Konstruktion eines POD (sockaddr_in) bedeutet, dass alle Member auf 0 gesetzt werden. Insofern ist das 'korrekt'.
Da Du m_client_addr vermutlich von accept() füllen lässt und vermutlich auch nicht verwendest, bevor ein Client akzeptiert wurde, könntest Du Dir diese Initialisierung allerdings auch sparen.
-
Sone schrieb:
Na, die WinAPI Sockets wirste doch kennen?
Nein. Was ist dieses 'Win' von dem hier alle immer reden?
-
SeppJ schrieb:
Was ist dieses 'Win' von dem hier alle immer reden?
Hat was mit WinWin-Situationen zu tun - "Win(dows) win(s) - you loose"

-
SeppJ schrieb:
Sone schrieb:
Na, die WinAPI Sockets wirste doch kennen?
Nein. Was ist dieses 'Win' von dem hier alle immer reden?
Das ist die Abkürzung für Windows API, aber ich bin sicher, du weißt das schon längst und bist nur von der Abkürzung genervt...
-
Sone schrieb:
Das ist die Abkürzung für Windows API, aber ich bin sicher, du weißt das schon längst und bist nur von der Abkürzung genervt...
Dein Textverständnis ist eher oberflächlich, oder? Du bist so einer von den Typen die auf "Können sie mir sagen, wie spät es ist?" mit Ja/Nein antworten.
-
SeppJ schrieb:
Sone schrieb:
Das ist die Abkürzung für Windows API, aber ich bin sicher, du weißt das schon längst und bist nur von der Abkürzung genervt...
Dein Textverständnis ist eher oberflächlich, oder? Du bist so einer von den Typen die auf "Können sie mir sagen, wie spät es ist?" mit Ja/Nein antworten.
Nö. Allerdings sehe ich es als dein Problem, wenn du hier Probleme mit "Win" hast.
-
Kinder

btw. ist weder SOCKET noch sockaddr_in auf die Windows API beschränkt.
Beide Typen sind Bestandteil der POSIX Socket Spezifikation.
-
SOCKET nicht, der tyedef ist ne Microsoft Idee.
-
Hi,
danke für die rege Anteilnahme. Ich dachte nur dases ein guter Stil ist alle Member zu initialisieren. Und ich nicht wusste ob der Konstruktoraudruf der Struct socket_addr_in seine Arbeit tut. So wie es aussueht ja. Ich belege die Teile der Struktur die ich benötige nachträglich mit den richtigen Werten.
Danke!Gruß
-
Wozu dienen die anderen Member ueberhaupt? Ein Socket wird durch dein Handle, unter Windows der SOCKET, unter POSIX der int identifiziert.
-
@Kellerautomat:
SOCKET unter Windows ist auch nur ein typedef auf int, man kann also getrost portabel int verwenden
Allerdings hast du recht... die beiden zusätzlichen ints scheinen mir doch fragwürdig... (ersteren halte ich für den Rückgabewert von WSAStartup und zweiteren zur Speicherung aller möglicher Fehlercodes...)
kA ob das wirklich nötig ist, die extra in Attributen zu speichern statt sie lokal handzuhaben...auch die sockaddr_in dürfte eig kein Attribut sein müssen.
Üblicherweise (ich gehe davon aus, dass du am Client arbeitest) wird die nur einmal zum Aufruf von connect verwendet und dann nie wieder... da erscheint ein Attribut als Verschwendung...
-
DrakoXP schrieb:
@Kellerautomat:
SOCKET unter Windows ist auch nur ein typedef auf int, man kann also getrost portabel int verwenden
Soweit ich weiss ist es unsigned unter Windows, aber sicher bin ich mir nicht.
-
-
DrakoXP schrieb:
@Kellerautomat: du hast Recht.
winsock.h und winsock2.h schrieb:
typedef UINT_PTR SOCKET;Das ist aber nicht unbedingt
unsigned int.
Was ist eigentlich so schwer daran, sich portable typedefs zu basteln anstatt ahnungslos über Gefrickel zu diskutieren?#ifdef _WIN32 typedef SOCKET SocketHandle; #else typedef int SocketHandle; #endifFrankTheFox schrieb:
wird so die Struktur korrekt initialiert oder is das Quark?
SocketClient::SocketClient(): m_startup(-1), m_error(0), m_sock(0), m_client_addr() { }Wenn man dem Socket schon einen Standardwert geben muss, warum denn bitte Null? Der Wert für ein ungültiges Socket ist -1, auf Windows
INVALID_SOCKET.Und wenn wir schon in C++ sind, warum nicht einfach Boost.Asio?