реклама на сайте
подробности

 
 
> LwIP это потенциально опасное ПО или нет?, или я неправильно понял и не знаю что и как
AleksBak
сообщение Apr 7 2016, 12:59
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364



Вот если я скажем делаю так (использую NetConn API):
Код
struct netconn *conn, *newconn;
err_t err, accept_err;

conn = netconn_new(NETCONN_TCP);

while (1)
{
    if (conn != NULL)
    {
        err = netconn_bind(conn, NULL, 7000);

        if (err == ERR_OK)
        {
            netconn_listen(conn);

            while (1)
            {
                accept_err = netconn_accept(conn, &newconn);

                /* Process the new connection. */
                if (accept_err == ERR_OK)
                {
                    ...
                }
            }
        }
        else
        {
            netconn_delete(conn);
        }
    }
}

Т.е. все "по мануалу" и вопросов тут нет. Но вот вопрос такой тут - в функцию netconn_accept(conn, &newconn); я передал указатель на newconn, а эта функция в ответ обновила его значением указателя на свою локальную переменную (как я понял). Т.е. др. словами говоря - она создала внутри у себя какую-то локальную переменную, а потом второй параметр этой самой функции обновила уже новым значением указателя на эту переменную. И как теперь это понимать - ведь та локальная переменная существует в куче, но может же в любой момент времени быть затерта. Т.е. все работает как бы "до поры - до времени" так получается? Пока не "затрется случайно" та локальная переменная другим чем-то в ОЗУ. Или я не так понял? Или тут эта переменная newconn как бы "неполноценно" используется и в ней только что-то одно временно берется и потому все безопасно работает? Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AleksBak
сообщение Apr 7 2016, 18:22
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364



Я после того как написал свой вопрос все переживал, что не привел код самой функции netconn_accept() из стека LwIP и думал "вот люди будут меня ругать, что не показал ее код тоже", а оказывается никто не ответил даже еще. Вот сама функция netconn_accept из стека (в ней я убрал все некомпилирующиеся куски кода из-за условной компиляции чтобы не загромождать лишним кодом, а также добавил комментарий в том месте где ожидается получение семафора - см. код):
Код
err_t netconn_accept(struct netconn *conn, struct netconn **new_conn)
{
    struct netconn *newconn;
    err_t err;


    LWIP_ERROR("netconn_accept: invalid pointer", (new_conn != NULL), return ERR_ARG;);
    *new_conn = NULL;
    LWIP_ERROR("netconn_accept: invalid conn", (conn != NULL), return ERR_ARG;);
    LWIP_ERROR("netconn_accept: invalid acceptmbox", sys_mbox_valid(&conn->acceptmbox), return ERR_ARG;);

    err = conn->last_err;
    if (ERR_IS_FATAL(err))
    {
        /* don't recv on fatal errors: this might block the application task
         waiting on acceptmbox forever! */
        return err;
    }

    /* т.к. 3-й параметр тут - timeout равен 0, то ждем бесконечно долго прихода message (так сделано в этой функции): */
    sys_arch_mbox_fetch(&conn->acceptmbox, (void **) &newconn, 0);

    /* Register event with callback */
    API_EVENT(conn, NETCONN_EVT_RCVMINUS, 0);

    if (newconn == NULL)
    {
        /* connection has been aborted */
        NETCONN_SET_SAFE_ERR(conn, ERR_ABRT);
        return ERR_ABRT;
    }

    *new_conn = newconn;
    /* don't set conn->last_err: it's only ERR_OK, anyway */
    return ERR_OK;
}

Обратите внимание на строку №<последняя строка - 3> тут - вот это и есть, то о чем я писал:
Код
    *new_conn = newconn;

т.е. приравнивается значение указателя из 2-го параметра значению указателя на локальную переменную структуры!

Т.е. вопрос такой в итоге (извините, что сложно может написал до этого) - "Почему эта функция netconn_accept() из стека LwIP возвращает фактически указатель на свою локальную переменную?? Это правильно??" Спасибо.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- AleksBak   LwIP это потенциально опасное ПО или нет?   Apr 7 2016, 12:59
|- - _NB   Цитата(AleksBak @ Apr 7 2016, 20:22) Т.е....   Apr 7 2016, 18:55
|- - AleksBak   Цитата(_NB @ Apr 7 2016, 22:55) Она возвр...   Apr 8 2016, 03:22
|- - aaarrr   Цитата(AleksBak @ Apr 8 2016, 06:22) ...п...   Apr 8 2016, 06:23
|- - AleksBak   Цитата(aaarrr @ Apr 8 2016, 10:23) Так в ...   Apr 8 2016, 07:08
- - des333   AleksBak: Представьте, Вам нужно написать функцию...   Apr 8 2016, 07:13
|- - AleksBak   Цитата(des333 @ Apr 8 2016, 11:13) ... Пр...   Apr 8 2016, 07:36
|- - des333   Цитата(AleksBak @ Apr 8 2016, 10:36) ...Т...   Apr 8 2016, 07:50
|- - AleksBak   Цитата(des333 @ Apr 8 2016, 11:50) ...нап...   Apr 8 2016, 08:12
|- - des333   Цитата(AleksBak @ Apr 8 2016, 11:12) Да я...   Apr 8 2016, 08:13
|- - AleksBak   Цитата(des333 @ Apr 8 2016, 12:13) Это Ва...   Apr 8 2016, 08:27
|- - Сергей Борщ   QUOTE (AleksBak @ Apr 8 2016, 10:27) 3. и...   Apr 8 2016, 08:58
|- - AleksBak   Цитата(Сергей Борщ @ Apr 8 2016, 12:58) ....   Apr 8 2016, 09:21
|- - Сергей Борщ   QUOTE (AleksBak @ Apr 8 2016, 11:21) и по...   Apr 8 2016, 10:18
|- - AleksBak   Цитата(Сергей Борщ @ Apr 8 2016, 14:18) В...   Apr 8 2016, 10:38
|- - Сергей Борщ   QUOTE (AleksBak @ Apr 8 2016, 12:38) Я ду...   Apr 8 2016, 10:41
- - gosha-z   Я правильно понимаю, что newconn во втором сообщен...   Apr 8 2016, 08:39
|- - AleksBak   Цитата(gosha-z @ Apr 8 2016, 12:39) ...   Apr 8 2016, 08:56
- - AleksBak   Еще пояснение: newconn - это указатель на область ...   Apr 8 2016, 10:31
|- - Сергей Борщ   QUOTE (AleksBak @ Apr 8 2016, 12:31) А ес...   Apr 8 2016, 10:36
|- - AleksBak   Цитата(Сергей Борщ @ Apr 8 2016, 14:36) ....   Apr 8 2016, 10:53
|- - Сергей Борщ   QUOTE (AleksBak @ Apr 8 2016, 12:53) где-...   Apr 8 2016, 10:58
- - ar__systems   Вообще это довольно дерзко, не особо и в С понимая...   Apr 8 2016, 14:08
|- - AleksBak   Цитата(ar__systems @ Apr 8 2016, 18:08) В...   Apr 8 2016, 17:24
|- - ar__systems   Цитата(AleksBak @ Apr 8 2016, 12:24) У ме...   Apr 9 2016, 20:11
|- - jcxz   Цитата(AleksBak @ Apr 8 2016, 23:24) А Вы...   Apr 10 2016, 08:18
|- - AleksBak   Цитата(jcxz @ Apr 10 2016, 12:18) ... Дин...   Apr 10 2016, 08:31
|- - jcxz   Цитата(AleksBak @ Apr 10 2016, 14:31) Что...   Apr 10 2016, 08:45
|- - AleksBak   Цитата(jcxz @ Apr 10 2016, 12:45) Выделен...   Apr 10 2016, 09:19
|- - aaarrr   Цитата(AleksBak @ Apr 10 2016, 12:19) Код...   Apr 10 2016, 09:29
|- - jcxz   Цитата(AleksBak @ Apr 10 2016, 15:19) Поя...   Apr 10 2016, 09:32
||- - AleksBak   Цитата(jcxz @ Apr 10 2016, 13:32) ...Где ...   Apr 10 2016, 10:23
||- - jcxz   Цитата(AleksBak @ Apr 10 2016, 16:23) это...   Apr 10 2016, 11:38
||- - AleksBak   Цитата(jcxz @ Apr 10 2016, 15:38) Опять 2...   Apr 10 2016, 18:25
|- - ar__systems   Цитата(AleksBak @ Apr 10 2016, 04:19) Поя...   Apr 11 2016, 13:47
- - gosha-z   MailBox - почтовый ящик. MessageQueue - очередь со...   Apr 10 2016, 18:50
- - AleksBak   Опять я ошибся и перепутал - не "очередь сооб...   Apr 10 2016, 19:24


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 01:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.01417 секунд с 7
ELECTRONIX ©2004-2016