c ++ - Hvorfor laver den følgende kode min computer bip?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har svært ved at forstå, hvorfor dette kodeks gør min computer bip. Jeg har isoleret denne sektion af kode for at være den der producerer lejlighedsvis bip, men jeg kan ikke se, hvad der er problemet med det .


const int BUFFER\_LENGTH = 8192;
char buffer [BUFFER\_LENGTH + 1];
int recvResult;

do
{
    recvResult = recv(webSocket, buffer, BUFFER\_LENGTH, 0);
    buffer[recvResult] = '';
    printf("\%s", buffer);
    if (recvResult > 0)
    {
        sendResult = send(clientSocket, buffer, recvResult, 0);
    }
}while (recvResult > 0);

shutdown(webSocket, SD\_SEND);


For at give en lille smule kontekst er det en computer netværksklasse, hvor vi skal kode en proxy. Så det jeg laver er at lytte til svaret og blot videresende det til kunden.


Jeg kan ikke fortælle dig, hvor højt jeg sprang ud af min stol, da jeg først hørte den lydende lyd ...

Bedste reference


Bufferen indeholder sandsynligvis en 'a' char som gør computerens bip. Fra 5.2.2 (Semantik til tegnvisning):



  Alfabetiske undslippesekvenser, der repræsenterer nongrafiske tegn i udførsels tegnsættet, er beregnet til at fremstille handlinger på displayenheder som følger:

  
  

      
  • \ a (advarsel) Producerer en akustisk eller synlig advarsel uden at ændre den aktive position.

  •   


Andre referencer 1


Nevermind, fandt det, det var faktisk printf erklæring, der gjorde en occasional bip!

Andre referencer 2


Enig med 'a' bipforklaring.


Endnu et punkt om din kode:


recvResult = recv(webSocket, buffer, BUFFER\_LENGTH, 0);
buffer[recvResult] = '';


Bemærk at recvResult bliver -1, hvis der er en I/O-fejl (eller hvis du arbejder i den ikke-blokerende tilstand og ingen data, der skal læses hidtil).


I så fald skriver du i forbudt hukommelse, hvilket er (forkert, hvordan jeg hader denne sætning) udefineret adfærd . Simpelthen tale - hukommelse overskriv, hvilket er dårligt.


Du skal tjekke for socketfejl før skriver til buffer