Anzeige:
Ergebnis 1 bis 9 von 9

Thema: sockaddr_in

  1. #1
    Registrierter Benutzer
    Registriert seit
    25.05.2003
    Ort
    München
    Beiträge
    20

    sockaddr_in

    Ich beiß langsam in meine Tastatur. Ich sitze jetzt schon einige Stunden an folgendem Problem. Ich versuche ein Programm von mir zu kompilieren (mit gcc -o foobar foobar.c)

    Fehlermeldung des Compilers:
    http-serv.c: In function `main':
    http-serv.c:21: `sockaddr_in' undeclared (first use in this function)
    http-serv.c:21: (Each undeclared identifier is reported only once
    http-serv.c:21: for each function it appears in.)

    Hat jemand eine Ahnung, warum das nicht funktioniert. Bin noch zeimlich neu bei Linux Programmierung.

    Danke...

    Code:
    #include <stdio.h>
    #include <string.h>
    #include <arpa/inet.h>
    #include <netinet/in.h>
    #include <netdb.h>
    #include <sys/socket.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>
    
    [...]
    
    int main (int argc, char *argv[])
    {
    	struct	sockaddr_in adresse;
    	size_t	adresse_lenght = sizeof(sockaddr_in);
    [...]
    Neulich bei Microsoft: "Hey, it compiles. Ship it..."

  2. #2
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    hi,


    ich weiss nicht so ganz was du versuchst.

    Code:
    struct	sockaddr_in adresse;
    du machst da einen anfang einer deklaration von sockaddr_in und versuchst gleich danach ein objekt davon zu erstellen? das kann doch nicht funktionieren.

    gruss,

    tuxipuxi.

  3. #3
    Registrierter Benutzer
    Registriert seit
    25.01.2003
    Beiträge
    222
    @tuxipuxi: ein refresh in C wäre wieder angesagt

    natürlich kann das funktionieren, es soll ja eine struktur vom
    typ sockaddr_in erstellt werden mit dem namen adresse.
    der fehler kommt davon, dass die dazu nötige header
    datei nicht dabei ist. ich habs in <linux/in.h> gefunden,
    man musste nur gucken welche standard header datei diese
    selbst einbindet.
    noch was zu der schreibweise:
    bei c muss du es so machen, ich glaub bei c++ kannst du dir
    struct schenken.

    gruss
    Arthur

  4. #4
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    Original geschrieben von arthur
    @tuxipuxi: ein refresh in C wäre wieder angesagt

    das scheint mir auch so, aber irgendwie war ich mir sicher . na gut, C konnte ich eigentlich nie wirklich .

  5. #5
    Registrierter Benutzer
    Registriert seit
    25.05.2003
    Ort
    München
    Beiträge
    20
    Also ich habs mal mit der linux/in.h versucht. Gleiches Problem.
    Ich raff es einfach nicht. Um wirklich sicherzugehen hab ich mir die Header-Datei nochmal angeschaut, ob sockaddr_in wirklich definiert wurde.

    Es sollte nach meinem Verständnis doch so funktionieren.
    Neulich bei Microsoft: "Hey, it compiles. Ship it..."

  6. #6
    Registrierter Benutzer
    Registriert seit
    25.01.2003
    Beiträge
    222
    versuchmal mit:
    Code:
    #include <resolv.h>
    bei mir funktioniert es

    gruss
    Arthur

  7. #7
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    AFAIK sys/socket.h

    Das steht nämlich als zweiter Header in der man page von connect und in sys/types ist es nicht.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  8. #8
    Registrierter Benutzer
    Registriert seit
    25.05.2003
    Ort
    München
    Beiträge
    20
    Für alle, die es interessiert.
    Das ist des Rätsels Lösung:

    Code:
    	size_t	adresse_lenght = sizeof(sockaddr_in);
    muß umgewandelt werden in
    Code:
    	size_t	adresse_lenght = sizeof(adresse);
    Warum der Compiler den Fehler aber eine Zeile höher anzeigt entzieht sich meiner Kenntnis.
    Neulich bei Microsoft: "Hey, it compiles. Ship it..."

  9. #9
    Registrierter Benutzer Avatar von Trillian
    Registriert seit
    26.04.2001
    Beiträge
    180
    Logisch, das Ding heisst ja auch "struct sockaddr_in" und nicht "sockaddr_in". Wenn du direkt auf die Struct zugreifen möchtest, müsstest du einen typedef verwenden.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •