wosiu

SIK zagadka

Apr 9th, 2014
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.34 KB | None | 0 0
  1. //biore deskryptor socketa
  2. int msg_sock = accept(sock, (struct sockaddr *) &client_address, &client_address_len);
  3.  
  4. // otwieram strumien z deskryptora
  5. FILE* data_input_stream = fdopen( msg_sock, "r" ) )
  6.  
  7. // dzieki temu mogę ładnie, prosto i przyjemnie wczytywać dane (np fgets czy fscanf, które np parsują linię
  8. // 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:
  9.  
  10. fgets( buffer, sizeof(buffer), data_input_stream)
  11.  
  12. // 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
  13.  
  14. // No i teraz klu: jak po tym ładnie posprzątać
  15. //1) tak? :
  16.     if (close(msg_sock) < 0) {
  17.       syserr("close socket");
  18.     }
  19. //2) czy tak? :
  20.     if( fclose( data_input_stream ) != 0) {
  21.       syserr("close stream");
  22.     }
  23.  
  24. //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.
  25.  
  26. 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