|
LwIP это потенциально опасное ПО или нет?, или я неправильно понял и не знаю что и как |
|
|
|
Apr 7 2016, 12:59
|
Частый гость
 
Группа: Участник
Сообщений: 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 как бы "неполноценно" используется и в ней только что-то одно временно берется и потому все безопасно работает? Спасибо.
|
|
|
|
|
 |
Ответов
|
Apr 8 2016, 08:56
|
Частый гость
 
Группа: Участник
Сообщений: 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)  ...Если да - то что говорит дока на эту функцию по поводу способа выделения памяти для этой структуры и последующего ее освобождения? Не знаю. Я новичок тут и поэтому спросил как оно работает и почему так сделано.
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|