Ich habe Probleme der C - Sockets API an die Arbeit richtig in C++
auf z/OS
.
Obwohl ich einschließe sys/socket.h
, erhalte ich immer noch Fehler bei der Kompilierung, die mir mitteilen, dass dies AF_INET
nicht definiert ist .
Vermisse ich etwas Offensichtliches oder hängt dies damit zusammen, dass z/OS
meine Probleme viel komplizierter werden?
Update : Bei weiteren Untersuchungen stellte ich fest, dass es eine gibt #ifdef
, die ich treffe. Anscheinend z/OS
ist es nicht glücklich, wenn ich nicht definiere, mit welchem "Typ" von Steckdosen ich arbeite:
#define _OE_SOCKETS
Nun, ich persönlich habe keine Ahnung, wofür das _OE_SOCKETS
eigentlich ist. Wenn also z/OS
Sockets-Programmierer da draußen sind (Sie alle drei), könnten Sie mir vielleicht einen Überblick darüber geben, wie das alles funktioniert?
Test App
#include <sys/socket.h>
int main()
{
return AF_INET;
}
Ausgabe kompilieren / verknüpfen:
cxx -Wc,xplink -Wl,xplink -o inet_test inet.C
"./inet.C", line 5.16: CCN5274 (S) The name lookup for "AF_INET" did not find a declaration.
CCN0797(I) Compilation failed for file ./inet.C. Object file not created.
Eine Überprüfung von sys / sockets.h enthält die Definition, die ich benötige, und soweit ich das beurteilen kann, wird sie nicht durch #ifdef
Anweisungen blockiert .
Ich habe jedoch bemerkt, dass es Folgendes enthält:
#ifdef __cplusplus
extern "C" {
#endif
Was kapselt im Grunde die gesamte Datei? Ich bin mir nicht sicher, ob es darauf ankommt.
Also versuche
bevor Sie sys / socket.h einschließen
quelle
Vielleicht möchten Sie einen Blick auf cpp-sockets werfen , einen C ++ - Wrapper für die Sockets-Systemaufrufe. Es funktioniert mit vielen Betriebssystemen (Win32, POSIX, Linux, * BSD). Ich glaube nicht, dass es mit z / OS funktioniert, aber Sie können sich die verwendeten Include-Dateien ansehen und Sie werden viele Beispiele für getesteten Code haben, der auf anderen Betriebssystemen gut funktioniert.
quelle
@Jax: Die
extern "C"
Sache ist sehr wichtig. Wenn eine Header-Datei keine hat, müssen Sie (es sei denn, es handelt sich um eine C ++ - nur Header-Datei) Ihre folgende Datei beifügen#include
:Grundsätzlich ist dies immer dann von entscheidender Bedeutung, wenn ein C ++ - Programm eine Verbindung zu C-basierten Einrichtungen herstellen möchte
extern "C"
. In der Praxis bedeutet dies, dass die in externen Referenzen verwendeten Namen nicht wie normale C ++ - Namen entstellt werden. Referenz.quelle
HAFTUNGSAUSSCHLUSS: Ich bin kein C ++ - Programmierer, aber ich kenne C sehr gut. Ich habe diese Aufrufe von einem C-Code angepasst, den ich habe.
Auch Markdown setzen diese seltsamen _ als meine Unterstriche.
Sie sollten nur in der Lage sein, eine Abstraktionsklasse um die C-Sockets zu schreiben:
Dann haben Sie Methoden zum Öffnen, Schließen und Senden von Paketen über den Socket.
Zum Beispiel könnte der offene Anruf ungefähr so aussehen:
quelle
Die Antwort lautet: Verwenden Sie das folgende c89-Flag:
Beispiel folgt;
Weitere Informationen finden Sie im z / OS XLC / C ++ - Benutzerhandbuch unter C89-Optionen.
quelle