ошибка отправки: неверный адрес - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь отправить некоторые данные (криптографические материалы) через сокет TCP на моем локальном хосте. Итак, я отправляю сначала размер данных, и он работает хорошо. Затем я отправляю реальные данные. Все начинается хорошо, мой сервер получает некоторые из них, но через некоторое время происходит сбой, давая мне

Ошибка отправки: Неверный адрес

*** Ошибка в `/ home / stagiaire031 / Bureau / HElib-master / src / serveur ': free ():

неверный следующий размер (обычный): 0x0000000000882cc0 ***

Я пытался проверить его, чтобы получить некоторую информацию, но я получил только это:

- 7732-- ВАЛГРИНД ВНУТРЕННЯЯ ОШИБКА: Вальгринд получил сигнал 11 (SIGSEGV) - выход --7732-- si_code = 128; Неправильный адрес: 0x0; sp: 0x803426e30

Вальгринд: произошло «невозможное»: Убит смертельным сигналом

трассировка стека хоста: == 7732 == на 0x38091C12: ??? (в / usr / lib / valgrind / memcheck-amd64-linux)

== 7732 == по 0x38050E84: ??? (в / usr / lib / valgrind / memcheck-amd64-linux)

== 7732 == по 0x380510A9: ??? (в / usr / lib / valgrind / memcheck-amd64-linux)

== 7732 == по 0x380D4F7B: ??? (в / usr / lib / valgrind / memcheck-amd64-linux)

== 7732 == по 0x380E3946: ??? (в / usr / lib / valgrind / memcheck-amd64-linux)

статус расписания: running_tid = 1

На самом деле я не привык к valgrind, и единственное, что я нашел об этой ошибке, это this , но я не нахожу где-то в моем коде, где я мог бы писать до или после буфера .

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

вот соответствующий код для сервера:

char *buffer = 0;
buffer = new char[4096];
stringstream s2;
s2.str();
long n = recv(newsockfd, buffer, 50, 0);
cout << buffer << endl;
double size = stod(buffer, nullptr);
cout << "i receive this size of message : " << n << endl;
n = 0;
int i = 0;
cout << "we wait the message" << endl;
while (i < size)
{
    n = read(newsockfd, buffer, size);
    if (n < 0)
    {
        cout << "we got a receive error" << n << endl;
        perror("Send error");
    }
    else
    {
        cout << "concatenate strings" << endl;
        s2 << *buffer;
        cout << "we receive " << n << " and all : " << i << endl;
        i += n;
    }
    bzero(buffer, 4096);
}

а вот тот для клиента:

n = send(sockfd, s2.str().c_str(), 10, 0);
cout << "context size " << s1.str().length() << endl;
n = 0;
int i = 0;
while (i < s1.str().length())
{
    n = send(sockfd, s1.str().c_str(), s1.str().length() - i, 0);
    if (n < 0)
    {
        perror("Send error");
    }
    else
    {
        cout << "end of a turn... we send " << n << endl;
        i += n;
        s1.str() += n;
    }
}

Я ознакомился с сообщением об ошибке в сокете, например this , this или this . Они помогли мне раньше, но, кажется, не достаточно для моей текущей проблемы.

Спасибо всем за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...