Permalänk
Medlem

sockets i linux (c)

Sitter o försöker lära mig programmera sockets. Så lång är allt frid o fröjd, men när jag försöker kompilera

#include <sys/types.h> #include <sys/socket.h> int main(int argc, char *argv[]) { int sockfd = 0; struct sockaddr_in addr; memset(&addr, 0, sizeof(addr)); if( sockfd = socket(AF_INET, SOCK_STREAM, 0) < 0 ) return -1; return EXIT_SUCCESS; }

får jag fel på memset(&addr, 0, sizeof(addr));
gcc klagar på att den inte känner till storleken på addr

error: storage size of 'addr' isn't known

Har aldrig haft ett liknande fel förut. Nån som har nån aning, för nu är jag helt borta.

kör föresten gcc 3.4.5 (Gentoo 3.4.5-r1)

Permalänk
Medlem

variabeln addr är aldrig initierad med något värde, bara deklarerad.
Då är det svårt för kompilatorn att veta hur stor den är, eller det kommer bara bli ett random värde.

för övrigt används inte addr-variabeln någonstans i din kod, du borde kunna ta bort både deklareringen och memset-raden

Visa signatur
Permalänk
Medlem

Du måste importera den header där structen är definierad. I det här fallet heter den netinet/in.h. Du kan kolla mansidan inet(3) för mer information.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Sebbhe
variabeln addr är aldrig initierad med något värde, bara deklarerad.
Då är det svårt för kompilatorn att veta hur stor den är, eller det kommer bara bli ett random värde.

för övrigt används inte addr-variabeln någonstans i din kod, du borde kunna ta bort både deklareringen och memset-raden

Rekommenderar dig att läsa en introduktionsbok till C ...

Visa signatur

Intel Core i7-3770K | NVIDIA Geforce GTX 980 | 16 GB DDR3 | DELL P2415Q | DELL U2711 | DELL U2410

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av MagnusL
Rekommenderar dig att läsa en introduktionsbok till C ...

heh, ja ok, missade att det stod struct, men han använder inte den structen någonstans ändå.
iofs så är det nog nästa steg.

Visa signatur
Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av Sebbhe
heh, ja ok, missade att det stod struct, men han använder inte den structen någonstans ändå.
iofs så är det nog nästa steg.

Nope, men den finns i netinet/in.h.

Man behöver dessutom inte ge en variabel ett värde för att kunna köra sizeof() på den.

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem

Ja, det fungerade inget bättre för det

sockaddr finns uppenbarligen där i in.h, men jag får samma fel ändå.

Tänkte det kan vara nåt med min version av gcc, men å andra sidan känns det underligt också

Sebbhe: Det är lätt att missa en kodrad då o då, hehe

Permalänk
Medlem

*censur*

Edit: oups...

Visa signatur

"Sleep is one of those funny things about being a human being" - Marshall Brain
"Mike broke the hubble, Mike broke the hubble" - Mystery Science Theater 3000
"Det finns inget som kan kallas skrot!" säger Mulle Meck, "bara gamla saker som går att använda på nya sätt. Rulla ut och rulla på."

Permalänk
Medlem

ska det? nja, det är ju storleken på addr jag är ute efter. fast
sizeof(struct sockaddr_in) borde ge samma resultat.

Men nu upptäckte jag nåt spännande, det är inte memset-raden gcc klagar på, utan på själva deklarationen, hm

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Zic
ska det? nja, det är ju storleken på addr jag är ute efter. fast
sizeof(struct sockaddr_in) borde ge samma resultat.

Men nu upptäckte jag nåt spännande, det är inte memset-raden gcc klagar på, utan på själva deklarationen, hm

tänkte lite fel nu såg jag

Visa signatur

"Sleep is one of those funny things about being a human being" - Marshall Brain
"Mike broke the hubble, Mike broke the hubble" - Mystery Science Theater 3000
"Det finns inget som kan kallas skrot!" säger Mulle Meck, "bara gamla saker som går att använda på nya sätt. Rulla ut och rulla på."

Permalänk
Medlem

Tro't eller ej, men nu funkar det!!!

Det var in.h som saknades ändå. Missade att lägga till den i rätt fil, hehe. Som jag har försökt hitta det slarvet ikväll altså.

aja, tackar för hjälpen!!