Avatar billede nomak Nybegynder
13. marts 2004 - 11:39 Der er 3 kommentarer og
1 løsning

C - Accept driller, changes signedness

addrlen = sizeof(remoteaddr);           
if( (newfd = accept(listener, (struct sockaddr *)&remoteaddr, &addrlen)) == -1 )


får fejlen; passing `int *' as argument 3 of `accept(int, sockaddr *, socklen_t *)' changes signedness

nogen der ved hvad jeg kan gøre? :|
Avatar billede nomak Nybegynder
13. marts 2004 - 11:44 #1
(socklen_t *)&addrlen :/

min fejl...
Avatar billede segmose Nybegynder
13. marts 2004 - 12:23 #2
Hej nomak

virker det ikke hvis du erklære addrlen som socklen_t altså:

socklen_t
  addrlen;

istedet for
int
  addrlen;

typecast er ikke din ven...
Avatar billede noden Nybegynder
13. marts 2004 - 23:47 #3
Jeg tror faktisk det er normalt at erklære din addrlen som integer i linux og så typecaste den. (Har set de i en del bøger til linux)
Men begge virker fint uden problemer på min RedHat 8 med en g++ 3.2
(Ved så ikke om det er på linux!!)
Men det rigtige vil vel være at lave den socklen_t socklen så man slipper for et typecastet.
Jeg ved ikke om det rører ved compilerings og eksekveringstid!?
Avatar billede segmose Nybegynder
14. marts 2004 - 10:55 #4
Det vil næppe ændre compilerings/eksekveringstid men den dag hvor der ikke længere er en direkte sammenhæng mellem int og socklen_t, som der vist ikke er i standarden så kan det gå galt. Derudover ser det rodet ud med alle de typecast, der opstår flere fejl ved brug af typecast, du kan se hvad variablen egentlig skal bruges til hvor den er defineret.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester