Почему следующий код издает звуковой сигнал моего компьютера?

Мне очень трудно понять, почему этот фрагмент кода издает звуковой сигнал моего компьютера. Я выделил этот участок кода, чтобы он время от времени издавал звуковой сигнал, но не вижу в этом проблемы.

const int BUFFER_LENGTH = 8192;
char buffer [BUFFER_LENGTH + 1];
int recvResult;

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

shutdown(webSocket, SD_SEND);

Чтобы дать немного контекста, это для класса компьютерных сетей, в котором мы должны закодировать прокси. Итак, что я делаю, так это слушаю ответ и просто пересылаю его клиенту.

Не могу передать, как высоко я подпрыгнул со стула, когда впервые услышал звуковой сигнал...


person Gab Royer    schedule 17.11.2010    source источник


Ответы (3)


Буфер, вероятно, содержит символ '\a', из-за которого компьютер издает звуковой сигнал. Из 5.2.2 (семантика отображения символов):

Алфавитные escape-последовательности, представляющие неграфические символы в наборе символов выполнения, предназначены для выполнения следующих действий на устройствах отображения:

  • \a (предупреждение) Создает звуковое или визуальное предупреждение без изменения активной позиции.
person icecrime    schedule 17.11.2010
comment
Да, я тоже только что нашел. Понятия не имел об этом! - person Gab Royer; 17.11.2010

Неважно, нашел это, на самом деле это был оператор printf, который время от времени издавал звуковой сигнал!

person Gab Royer    schedule 17.11.2010
comment
мне интересно как? я не могу заставить свой компьютер издавать звуковой сигнал с помощью printf("\a") я делаю что-то не так? - person Newbie; 17.11.2010
comment
Я не знаю, из того, что я читал, printf(\a) должен заставить ваш компьютер издавать звуковой сигнал... - person Gab Royer; 17.11.2010
comment
@Newbie: Не каждая операционная система поддерживает звуковые сигналы. - person fredoverflow; 17.11.2010

Согласитесь с объяснением звукового сигнала '\a'.

Еще один момент о вашем коде:

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

Обратите внимание, что recvResult будет равно -1, если есть ошибка ввода-вывода (или если вы работаете в неблокирующем режиме и пока нет данных для чтения).

В таком случае вы будете записывать в запрещенную память, что является (черт возьми, как я ненавижу эту фразу) неопределенным поведением. Проще говоря - память затирается, что плохо.

Вы должны проверить наличие ошибки сокета перед записью в buffer

person valdo    schedule 17.11.2010