Ich habe ein Stück Code, das in einer Umgebung vor langer Zeit verwendet wurde. Ich bin mir ziemlich sicher, dass es ein FreeBSD-Rechner war, also habe ich FreeBSD 8.3 bekommen und ich versuche, diese Datei zu erstellen, aber es funktioniert nicht.
Wenn ich versuche es zu kompilieren, klagt es mit:
%Vor%Ich habe mich umgesehen und sehe, dass alle in der Datei sys / socket.h angegeben sind. Dies ist meine eigentliche Datei:
%Vor%Ich habe das Gefühl, dass mein Code die sys / socket.h-Datei irgendwie nicht "liest", so dass er nichts über socket_stru und IPPROTO_TCP weiß, aber ich bin nur wirklich verloren.
Irgendwelche Ideen?
Ich schneide und füge deinen Code in eine Datei ein (entferne nur den #include f.h und verschließe den Funktionsaufruf). Er kompiliert einfach gut auf Linux .
Ich vermute, dass es Unterschiede zwischen den Headerdateien auf BSD geben kann. Für die Socket-Programmierung schließe ich normalerweise ALLE diese Header-Dateien ein. Und ich weiß, dass mein Socket-Code auch auf BSD kompiliert wird. Ich vermute, dass eine dieser Headerdateien die Definition für sockaddr_in enthält. Ich erinnere mich, als ich portiert von Socket-Code zu BSD, musste ich einige von diesen explizit hinzufügen.
%Vor%Hoffe das hilft
Keine der anderen Antworten funktionierte für mich. Nachdem ich in die Datei sys/socket.h
geschaut habe, habe ich nicht einmal eine Definition für struct sockaddr_in
gesehen.
Was für mich funktionierte, war #include
einer der folgenden Dateien, wenn Sie den entsprechenden struct sockaddr_*
-Typ verwenden:
struct sockaddr_in
, #include <netinet/in.h>
verwenden
struct sockaddr_un
, #include <sys/un.h>
verwenden
struct sockaddr_ns
, #include <netns/ns.h>
verwenden
struct sockaddr_ndd
, #include <sys/ndd_var.h>
verwenden
Weitere Informationen zu den Header-Dateien für die Socket-Programmierung finden Sie hier .