Socket Programmering
Jeg er i gang med at lave en Proxy Server, og er ved at være færdig grundopbygningen (send/modtag, læs/rediger headerfields ect). Serveren virker efter henseende, men jeg kan ikke overføre Content-Type: image/jpeg, gif ect. Når jeg læser body content, fra disse pakker, læser jeg alt data, men i min buffer ligger der kun 4 bytes?! Det er meget mystisk. Jeg bruger den samme funktion til alt body content reads. (Bruger Mepis 2004, 2.6.7Funktionen (read_body) får 3 parametre:
- int fd, filedescriptor til serveren hvor dataene skal læses fra. Jeg har læst en gang fra denne, da jeg på dette tidspunkt har hentet headeren.
- char *ptr, pointer til en dynamisk allokeret buffer, på størrelsen lig Content-Length i headeren. Dvs. størrelsen på dataene der ligger i body.
- int length, størrelsen på body, læst fra headeren.
funktion:
[CODE]
int read_body(int fd, char *ptr, int length)
{
int res = 0;
int total = 0;
if(ptr != NULL)
{ //errno = 0;
while(total < length )
{
if((res = (read(fd, ptr + total, length))) < 0)
errexit("\nError readback from server. Error: %s", strerror(errno));
if(res >= 0)
total += res;
printf("\n Read: %d\tTotal read: %d\t Total length: %d\tfd: %d", res, total, length, fd);
if(res == 0)
{ puts("\nBREAK 0!!!!");
break;
}
if(res < 0)
{ puts("\nBREAK -1!!!");
break;
}
}
logit(ptr, "temp.log");
printf("\nRecieved:\n%s", ptr);
}
else
logit("\nEvt. malloc error -> no error handeling!", "system.log");
printf("\nSo far, so good!");
return res;
}
Udprint fra terminal
[CODE]
HTTP version: 1.1
Status-code: 200
length: 138239
strlen(obj->body_content): 138239
Read: 66984 Total read: 66984 Total length: 138239 fd: 5
Read: 1448 Total read: 68432 Total length: 138239 fd: 5
Read: 1448 Total read: 69880 Total length: 138239 fd: 5
Read: 1448 Total read: 71328 Total length: 138239 fd: 5
Read: 1448 Total read: 72776 Total length: 138239 fd: 5
Read: 1448 Total read: 74224 Total length: 138239 fd: 5
Read: 1448 Total read: 75672 Total length: 138239 fd: 5
Read: 1448 Total read: 77120 Total length: 138239 fd: 5
Read: 1448 Total read: 78568 Total length: 138239 fd: 5
Read: 1448 Total read: 80016 Total length: 138239 fd: 5
Read: 1448 Total read: 81464 Total length: 138239 fd: 5
Read: 1448 Total read: 82912 Total length: 138239 fd: 5
Read: 1448 Total read: 84360 Total length: 138239 fd: 5
Read: 1448 Total read: 85808 Total length: 138239 fd: 5
Read: 1448 Total read: 87256 Total length: 138239 fd: 5
Read: 1448 Total read: 88704 Total length: 138239 fd: 5
Read: 1448 Total read: 90152 Total length: 138239 fd: 5
Read: 1448 Total read: 91600 Total length: 138239 fd: 5
Read: 1448 Total read: 93048 Total length: 138239 fd: 5
Read: 1448 Total read: 94496 Total length: 138239 fd: 5
Read: 1448 Total read: 95944 Total length: 138239 fd: 5
Read: 1448 Total read: 97392 Total length: 138239 fd: 5
Read: 1448 Total read: 98840 Total length: 138239 fd: 5
Read: 1448 Total read: 100288 Total length: 138239 fd: 5
Read: 1448 Total read: 101736 Total length: 138239 fd: 5
Read: 1448 Total read: 103184 Total length: 138239 fd: 5
Read: 1448 Total read: 104632 Total length: 138239 fd: 5
Read: 1448 Total read: 106080 Total length: 138239 fd: 5
Read: 1448 Total read: 107528 Total length: 138239 fd: 5
Read: 1448 Total read: 108976 Total length: 138239 fd: 5
Read: 1448 Total read: 110424 Total length: 138239 fd: 5
Read: 1448 Total read: 111872 Total length: 138239 fd: 5
Read: 1448 Total read: 113320 Total length: 138239 fd: 5
Read: 1448 Total read: 114768 Total length: 138239 fd: 5
Read: 1448 Total read: 116216 Total length: 138239 fd: 5
Read: 1448 Total read: 117664 Total length: 138239 fd: 5
Read: 1448 Total read: 119112 Total length: 138239 fd: 5
Read: 1448 Total read: 120560 Total length: 138239 fd: 5
Read: 1448 Total read: 122008 Total length: 138239 fd: 5
Read: 1448 Total read: 123456 Total length: 138239 fd: 5
Read: 1448 Total read: 124904 Total length: 138239 fd: 5
Read: 1448 Total read: 126352 Total length: 138239 fd: 5
Read: 1448 Total read: 127800 Total length: 138239 fd: 5
Read: 1448 Total read: 129248 Total length: 138239 fd: 5
Read: 1448 Total read: 130696 Total length: 138239 fd: 5
Read: 1448 Total read: 132144 Total length: 138239 fd: 5
Read: 1448 Total read: 133592 Total length: 138239 fd: 5
Read: 1448 Total read: 135040 Total length: 138239 fd: 5
Read: 1448 Total read: 136488 Total length: 138239 fd: 5
Read: 1751 Total read: 138239 Total length: 138239 fd: 5
Recieved:
ÿØÿà
So far, so good!
[/CODE]
Som man kan se, bliver der rent faktisk læst noget, men jeg får praktisk talt intet i min buffer (ud over de 4 bytes). Nogen der har nogle forslag til hvad jeg kan gøre. Bar brugt 1½ uge på det nu, uden mærkbart resultat. Jeg undskylder for den lange terminal udskrift, men det var for at se, at read() functionen rent faktisk læser alt data. Håber nogen kan hjælpe.
/Jnusa