Winsocks unbedingt empfehlenswert?
-
Ich beginne derzeit, eine Anwendung zu schreiben, die Sockets benötigt. Da ich das ganze später mit großer Wahrscheinlichkeit mal portieren will, kam mir der Gedanke, dass hier Winsocks zu verwenden vielleicht später mehr Arbeit macht, als eine allgemeinere API zu benutzen, beispielsweise die Berkeley Sockets. Was ist denn da empfehlenswert? Wiegen die Vorteile (wenn ja, welche?) der Winsocks unter Windows die eventuellen Probleme beim Portieren auf? Ich bin leider in dem Gebiet komplett auf Neuland.
-
send, sendto, recv, recvfrom ist ANSI Standart, das kannst du unter Windows und sonstwo verwenden. Wenn du halt hirgendwelche Callbacks über einen Eenthandler abfangen willst, dann must du halt die Wianpi Varianten von dem Zeugs benutzen.
Was versthest du eigentlich unter winsocks. Obengenannte Funktionen werden sowieso über die "winsock.h" oder "winsock2.h" unter Verwendung von "ws2_32.lib". Erklär mal welche Funktionen du meinst.
-
send, sendto, recv, recvfrom ist ANSI stan****
hör auf ihn zu ver*****en
-
Soweit ich weiss, dürften Funktionen wie send, recv, select, gethostbyname, shutdown, setsockopt usw. z.B. unter *nix genauso zu verwenden sein. Spezielle Funktionen, die Winsock noch zusätzlich anbietet, sind für "normale" Programme (wozu Browser, Chatprogramme, Onlinespiele, HTTP-Server etc. gehören) nicht zwingend notwendig.
Und anstatt WSAStartup rufst du dann eben die äquivalente Funktion auf (falls das überhaupt erforderlich ist). Wenn du C++ verwendest, solltest du das ganze in eine Klasse kapseln. Damit erübrigt sich alles weitere, denn du musst lediglich die Klasse selbst anpassen.
Ansonsten gäbe es auch noch boost.Asio, wo das alles schon für dich erledigt ist (natürlich plattformunabhängig).
-
WinSocks ist "fast gleich" Berkeley Sockets. Portieren ist meist relativ einfach, wenn man eben die "erweiterten" WinSocks funktionen nicht verwendet (alles was mit WSA anfängt).
Guck dir mal die Boost.Asio an. Die ist portabel, und IMO recht fein. Und man kann die genauso synchron einsetzen, also muss nicht mit asynchronem IO verwendet werden, bloss weil sie ASIO heisst.
-
WSAStartup() ist meines wissens erforderlich um die Berkley Sockets unter Windoof für deine app zu initialisieren, die wsock32 lib/a enthält alle wesentlichen fkts wie FD_sets und recv/send/write/read connect/bind etc... quasi das selbe wie unter *nix systeme. Winsock bietet aber noch zusätzliche features die du dann "nur" unter windoof nutzen kannst,
willst du deinen source für mehrere systeme portabel machen, so solltest du dir einen wrapper schreiben der checkt für welches OS das compiliert werden soll, und dann die entsprechenden lib/header files includiert, und bis auf WSAStartup() und WSACleanup() auf windoof fixierte fkts wie callback's verzichten.Ich hoffe mein statement war sinnvoll, greetz
-
krass man heute kommt DSDS!!!!!!!
-
cool!
-
******** schrieb:
send, sendto, recv, recvfrom ist ANSI stan****
hör auf ihn zu ver*****en
im vorraus, standart, verarschen
