Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //biore deskryptor socketa
- int msg_sock = accept(sock, (struct sockaddr *) &client_address, &client_address_len);
- // otwieram strumien z deskryptora
- FILE* data_input_stream = fdopen( msg_sock, "r" ) )
- // dzieki temu mogę ładnie, prosto i przyjemnie wczytywać dane (np fgets czy fscanf, które np parsują linię
- // motywacja do wykorzystania w tym zadaniu jest taka, że tcp może pociachać dane na dowolnie wielkie segmenty. W związku z tym trzeba by się troche pobawić, żeby wziąć nr portu udp przysłanego przez klienta. Strumień rozwiązuje problem i wystarcza coś takiego, bo nie wypusci przed '\n' itp:
- fgets( buffer, sizeof(buffer), data_input_stream)
- // przy zalozeniu ze klient wysłał "nr_portu\n" mam w bufferze cały numer bez obawy, że coś jeszcze dojdzie, albo przyszlo za dużo
- // No i teraz klu: jak po tym ładnie posprzątać
- //1) tak? :
- if (close(msg_sock) < 0) {
- syserr("close socket");
- }
- //2) czy tak? :
- if( fclose( data_input_stream ) != 0) {
- syserr("close stream");
- }
- //Mam wrażenie, że obie z tych rzeczy dają ten sam efekt. W każdym razie jak wykonuje i to i to, to drugie close daje błąd.
- Powyższe działa, ale nie jestem pewien czy to jest koszerne (czy nie zostawia gdzieś w otchłani jakiś śmieci po sobie, w szczególnoście te close mnie martwią).
Advertisement
Add Comment
Please, Sign In to add comment