PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : sockaddr_in



Compuholic
28-05-2003, 19:03
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...



#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);
[...]

tuxipuxi
28-05-2003, 19:08
hi,


ich weiss nicht so ganz was du versuchst.



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.

arthur
28-05-2003, 19:32
@tuxipuxi: ein refresh in C wäre wieder angesagt :rolleyes:

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

tuxipuxi
28-05-2003, 19:35
Original geschrieben von arthur
@tuxipuxi: ein refresh in C wäre wieder angesagt :rolleyes:



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

Compuholic
28-05-2003, 20:51
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.

arthur
28-05-2003, 21:01
versuchmal mit:


#include <resolv.h>


bei mir funktioniert es

gruss
Arthur

anda_skoa
28-05-2003, 21:19
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,
_

Compuholic
29-05-2003, 09:02
Für alle, die es interessiert.
Das ist des Rätsels Lösung:



size_t adresse_lenght = sizeof(sockaddr_in);

muß umgewandelt werden in


size_t adresse_lenght = sizeof(adresse);


Warum der Compiler den Fehler aber eine Zeile höher anzeigt entzieht sich meiner Kenntnis.

Trillian
03-06-2003, 07:28
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.