26. juli 2007 - 11:29Der er
7 kommentarer og 1 løsning
Problem med linux sockets
Jeg har skrevet et program som gør brug af sockets og nu vil jeg gerne have det testet. Jeg har skrevet et lille test-program som opretter en connection til "127.0.0.1" og sender to beskeder.
accept/connect går fint, men recv() returnerer 0 inden jeg får sendt min først besked. Så vidt jeg har forstået betyder det at den har disconnected. Begge mine send() returnerer -1.
Kan jeg ikke have mit program og test-program på samme maskine, eller skal jeg bare gøre det på en anden måde?
Det har jeg gjort. Som sagt er det først mens programmet venter med recv() at socket'en disconnecter. Dvs. Programmet's step 1-4 går fint, samt test programmet's step 1-2.
min recv() er som følger: bytes_read = recv(connection_fd, buffer, 3, 0); //Vent på 3 bytes Og den først send() i test programmet er: if (send(connected_fd, msg1, 3, 0) == -1) printf("Error send Msg1!\n");
recv() returnerer med bytes_read = 0. Hvilket så vidt jeg har forstået betyder at den er disconnectet.
Brugte strerror(errno) og fandt fejlen. Tak! Troede connection() returnerede en ny socket ligesom accept(). Ups!! Skriv lige et svar, så du kan få point.
BTW: Jeg har en struct: typedef struct { char msg_id; long length; } msg_t; sizeof(msg_t.msg_id) = 1 sizeof(msg_t.length) = 4 sizeof(msg_t) = 8 Det er vel fordi mit OS er 32 bit, men kan jeg (nemt) undgå at sende de 8 bytes, og i stedet bare de 5 jeg skal bruge? (Uden at skulle lave en send-funktion for hver eneste message struct jeg har.)
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.