Kirjoittaja Aihe: c++ socket read, luettavan merkkijonon rajoitus tai muu ongelma  (Luettu 1151 kertaa)

teele

  • Käyttäjä
  • Viestejä: 852
    • Profiili

Tarkoitus olisi lukea socketista pieni, alle 1024 merkijono ja kokeilen tällaista lukuohjelman pätkää

Koodia: [Valitse]

  int my_read()
  {
    if((new_sock = accept(listening_sock, (struct sockaddr *)&address, (socklen_t*)&address_length)) < 0)
      {
        perror("Accept");
        exit(EXIT_FAILURE);
      }
    n_of_read_chars = read(new_sock, in_buffer, 1024 - 1); // tila loppumerkille
    in_buffer[n_of_read_chars ] = '\0';  // lisätään loppumerkki
   
    return 0; // lukeminen onnistui
  }

eli jos luettavaa tulee ja listen huomaa sen, tehdään uusi socketti, josta luetaan (toivottavasti vain korkeintaan) 1023 merkkiä. Lukemisen varattu puskuritila on 1024 ja viimeisen luetun merkin jälkeen pitäisi lisätä '\0'. 

Onko koodissa näkyvissä todennäköisiä ongelmia, mahdollistaako se esimerkiksi ylivuodon ja osaako se lukea varmasti kaiken alle 1023 pituisen tulevan viestin, kun socket on

Koodia: [Valitse]
socket( AF_INET, SOCK_STREAM, 0))