Frage

Ich bin über einige Steckdosen related stuff in C ++ zu entwickeln und die Software als portable von Anfang an zwischen Windows und Linux wie möglich richtig sein (so dass es später tragbar ist heikel.) Möchte

Ich habe schon in verschiedenen Bibliotheken sieht, ist es einen für C ++ von alhem.net und natürlich gibt es boost :: asio. boost :: asio sehr vielversprechend aussieht würde aber eine sehr große Abhängigkeit für Anwendungen dieses klein sein.

Ist es sogar wert Schreiben der mir Sachen oder sollte ich nur eine Bibliothek? Wenn ich es selbst tun, was die wichtigsten Gefahren wären?

War es hilfreich?

Lösung

Winsocks sind nicht sehr kompatibel mit Posix-Buchsen:

  • In Winsocks eine Buchse vom Typ SOCKET. Auf Posix es ist einfach ein Dateideskriptor (int), auf dem Sie normale read() und write() Anrufe durchführen können.
  • Sie kehren nicht zurück Fehler die gleiche Weise.
  • Sie haben nicht einige Optionen auf recv() und send() unterstützen.
  • Sie haben zu initialisieren und die Winsocks Bibliothek mit zwei Specials Funktionen unitialize.
  • Ich glaube nicht, dass Sie Windows-Sockets mit shutdown() oder close() schließen können. Es ist so etwas wie closesocket() statt.

Es muss mehr Unterschiede sein, aber das ist, was ich jetzt erinnern kann. Wenn Sie Portabilität mit Winsocks wollen, müssen Sie eine kleine Bibliothek haben eine Buchse zum Schließen, Drucken eine Fehlermeldung und so weiter.

ich wahrscheinlich mit boost::asio gehen würde, persönlich (ich habe es nie benutzt, obwohl).

Andere Tipps

Ich habe ein paar tragbaren Wrapper um Steckdosen entwickelt. Stellen Sie sicher, dass Sie nicht die crappy Spur ohne Rückkehr nach unten gehen, die von WinSock2 Ereignisse gebildet. Other than that, wie ich es sehe, sind die größten Unterschiede:

  • startet in Windows-Netzwerk, müssen Sie ::WSAStartup() zu nennen, ist es unter Windows laufen ::WSACleanup() herunterzufahren; in Linux nichts zu tun,
  • close() in Linux ist closesocket() in Windows,
  • Standardpuffergrößen unterscheiden sich sowohl zwischen den Treibern und Betriebssystemen, so stellen Sie sicher, sie setzen mit SO_RCVBUF und SO_SNDBUF,
  • SO_REUSEADDR stiehlt die Adresse unter Windows ermöglicht häufige Wiedereröffnung auf Linux; Sie würden wahrscheinlich nur dieses Flag in Linux verwenden möchten,
  • eine Buchse macht nicht blockierend verwendet ::ioctlsocket() in Windows, ::fcntl() in Linux,
  • die Header-Dateien sind unterschiedlich, <sys/socket.h> und Freunde in Linux, <WinSock.h> in Windows,
  • gehen tragbar, ist der einfachste Weg, wahrscheinlich ::select() zu verwenden, um auf Daten zu warten zu gelangen,
  • fd_sets sind völlig anders auf Windows / Linux; dies ist nur relevant, wenn Sie die Initialisierung von fd_sets optimieren müssen, wenn beispielsweise das Hinzufügen / Entfernen von beliebigen Steckdosen,
  • in Windows, jeder Faden an der Steckdose hängen wird mit einem Fehlercode freigegeben, wenn der Socket geschlossen ist, in Linux der Thread bleibt abzuwarten. Wenn der Faden die Buchse mit zum Beispiel ::recvfrom() blockiert, könnten Sie die ::sendto() mit unter Linux das Abwürgen Thread veröffentlichen.

Alles, was ich jemals brauchte nur aus dem låda gearbeitet.

Werfen Sie einen Blick auf die "Adaptive Communication Environment" (ACE) Bibliothek: (ACE Home) Es bietet einige schöne Abstraktionen und viel Flexibilität alle in einem tragbaren Bibliothek aufgerollt, auf dem Windows, MacOS und Linux unterstützt. Es hat ein bisschen eine steile Lernkurve, aber ich habe eine sehr guten Preis davon.

Wie viele Buchse Sachen werden Sie verwenden? Ich habe mehrere Anwendungen durchgeführt, wo die Buchse Sachen ziemlich hohe Niveau (Öffnen, Lesen, Schreiben) waren und funktionierte perfekt von Windows auf Linux. Wenn es mehr als das. - geht mit Boost

Ehrlich gesagt, würde ich boost :: asio als erste Präferenz. Wenn Sie wirklich nach unten und schmutzig mit dem Socket-API erhalten möchten, können Sie den Standard-BSD-Socket-API sowohl unter Windows und Linux verwenden - es ist nur, dass unter Windows finden Sie verknüpfen müssen (und initialisieren) Winsock2, während auf Linux werden Sie nicht eine separate Bibliothek gegen verlinkt haben.

Haben Sie einen Blick auf diese ... http://sourceforge.net/projects/cpp- Buchsen /

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top