[so] [Tema5] Bug exasperant

Costin Lupu costin.lup at gmail.com
Sat May 13 21:04:32 EEST 2017


On Sat, 2017-05-13 at 18:02 +0300, Andrei Mardale wrote:
> Salut!
> 
> 
> Multumesc mult pentru sfaturi! Am rezolvat in mare parte. Acum am o
> alta problema: uneori, la ultimul test (cel cu ambele tipuri de
> fisiere) se intampla urmatorul lucru: primesc o cerere pentru un
> fisier, trimit fisierul corect, insa dupa un timp, primesc din nou o
> cerere pentru acelasi fisier. A doua oara, parserul gaseste o cale
> gresita, ex ./static/large07.datt . Astfel ca cel mai probabil se
> trimite un 404 Not Found si se suprascrie fisierul initial trimis cu
> un fisier gol ( 0 K) .

N-am înțeles prea bine care e problema, dar dacă serverul primește
request pentru fișierul './static/large07.datt' înseamnă că iar ai o
problemă cu inițializarea - de data asta a buffer-ului în care se
salvează calea request-ului. Uitându-mă în codul tău văd că presupunerea
mea e întemeiată - folosești mereu fără să cureți request_path-ul
înainte:

memcpy(request_path, buffer, buffer_len)

Pe lângă tema 5 îți mai dau 2 teme:
1) De analizat diferențele dintre memcpy și strcpy. Asta e și întrebare
de interviu pentru joburi entry-level.
2) Învață să folosești debugger-ul gdb [1]. Nu vei avea mereu oameni
care să-ți răspundă la întrebări, mai ales că pe viitor problemele vor
fi din ce în ce mai complexe. Dacă nu te împaci cu gdb-ul în linie de
comandă, atunci folosește-l în IDE-ul tău preferat. Majoritatea
IDE-urilor pentru dezvoltare C pe Linux au un frontend grafic pentru
gdb. Personal când am nevoie de un frontend grafic folosesc Eclipse CDT.
Găsești tutoriale pe net pentru toate. Spre exemplu aici [2] găsești un
tutorial video pentru debugging Java în Eclipse (pentru debugging C în
Eclipse CDT abordarea e aceeași).

> Ma gandesc ca ar putea fi din cauza modului in care inchid conexiunea
> in cazul fisierelor statice? Eu apelez functia 'connection_remove()',
> in care se inchide socket-ul, se schimba starea in
> STATE_CONNECTION_CLOSED si se face free(con) . 

[1] https://ocw.cs.pub.ro/courses/so/laboratoare/resurse/gdb
[2] https://www.youtube.com/watch?v=9gAjIQc4bPU

Costin




More information about the so mailing list