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

 
 
> 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
Ответов
gosha-z
сообщение Apr 8 2016, 08:39
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 30-10-05
Пользователь №: 10 288



Я правильно понимаю, что newconn во втором сообщении обретает значение при вызове sys_arch_mbox_fetch? Если да - то что говорит дока на эту функцию по поводу способа выделения памяти для этой структуры и последующего ее освобождения?
Go to the top of the page
 
+Quote Post
AleksBak
сообщение Apr 8 2016, 08:56
Сообщение #3


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

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



Цитата(gosha-z @ Apr 8 2016, 12:39) *
Я правильно понимаю, что newconn во втором сообщении обретает значение при вызове sys_arch_mbox_fetch?...

Эта структура newconn вот такая - см. ее объявление ниже и на выходе из функции в ней должны появится готовые уже заполненные поля. А в вызвавшей, основной функции мы уже пользуемся этим "готовым" набором (см. коммент в 1-м куске кода: "Process the new connection."):
CODE
/** A netconn descriptor */
struct netconn
{
/** type of the netconn (TCP, UDP or RAW) */
enum netconn_type type;
/** current state of the netconn */
enum netconn_state state;
/** the lwIP internal protocol control block */
union
{
struct ip_pcb *ip;
struct tcp_pcb *tcp;
struct udp_pcb *udp;
struct raw_pcb *raw;
} pcb;
/** the last error this netconn had */
err_t last_err;
/** sem that is used to synchroneously execute functions in the core context */
sys_sem_t op_completed;
/** mbox where received packets are stored until they are fetched
by the netconn application thread (can grow quite big) Это QueueHandle_t. */
sys_mbox_t recvmbox;
#if LWIP_TCP
/** mbox where new connections are stored until processed by the application thread Это QueueHandle_t. */
sys_mbox_t acceptmbox;
#endif /* LWIP_TCP */
/** only used for socket layer */
#if LWIP_SOCKET
int socket;
#endif /* LWIP_SOCKET */
#if LWIP_SO_SNDTIMEO
/** timeout to wait for sending data (which means enqueueing data for sending in internal buffers) */
s32_t send_timeout;
#endif /* LWIP_SO_RCVTIMEO */
#if LWIP_SO_RCVTIMEO
/** timeout to wait for new data to be received (or connections to arrive for listening netconns) */
int recv_timeout;
#endif /* LWIP_SO_RCVTIMEO */
#if LWIP_SO_RCVBUF
/** maximum amount of bytes queued in recvmbox not used for TCP: adjust TCP_WND instead! */
int recv_bufsize;
/** number of bytes currently in recvmbox to be received,
tested against recv_bufsize to limit bytes on recvmbox
for UDP and RAW, used for FIONREAD */
s16_t recv_avail;
#endif /* LWIP_SO_RCVBUF */
/** flags holding more netconn-internal state, see NETCONN_FLAG_* defines */
u8_t flags;
#if LWIP_TCP
/** TCP: when data passed to netconn_write doesn't fit into the send buffer,
this temporarily stores how much is already sent. */
size_t write_offset;
/** TCP: when data passed to netconn_write doesn't fit into the send buffer,
this temporarily stores the message.
Also used during connect and close. */
struct api_msg_msg *current_msg;
#endif /* LWIP_TCP */
/** A callback function that is informed about events for this netconn */
netconn_callback callback;
};

Цитата(gosha-z @ Apr 8 2016, 12:39) *
...Если да - то что говорит дока на эту функцию по поводу способа выделения памяти для этой структуры и последующего ее освобождения?

Не знаю. Я новичок тут и поэтому спросил как оно работает и почему так сделано.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- AleksBak   LwIP это потенциально опасное ПО или нет?   Apr 7 2016, 12:59
- - AleksBak   Я после того как написал свой вопрос все переживал...   Apr 7 2016, 18:22
|- - _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
- - 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 Текстовая версия Сейчас: 22nd August 2025 - 10:59
Рейтинг@Mail.ru


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