|
Вышла предварительная версия TN NET TCP/IP stack |
|
|
|
 |
Ответов
|
Mar 28 2010, 19:22
|
Группа: Участник
Сообщений: 3
Регистрация: 13-11-09
Пользователь №: 53 607

|
Цитата(yuri_t @ Oct 1 2009, 14:24)  Вышла версии 0.9 TN NET TCP/IP stack.
Добавлен DHCP client.
Просьба ко всем, кто использует (пробует) TN NET TCP/IP stack - присылайте, пожалуйста, ваши замечания и предложения на yuri@tnkernel.com. Здравствуйте Юрий. Пытаюсь использовать Ваш TCP/IP stack с TN kernel в одном проекте и столкнулся с такой проблемой. Есть задача, которая с одной стороны работает с клиентом на host PC по tcp/ip, а сдругой стороны с двумя очередями. Если задача читает сокет, то она естественно засыпает при отсутствии сообщений от клиента. Но тогда она может прозевать сообщение из очереди. Есть ли в Вашей реализации стека что-либо такое (типа select), что может сообщать о событии появления сообщения через сокет до вызова функции s_recv ?
Сообщение отредактировал sim732 - Mar 28 2010, 19:24
|
|
|
|
|
Mar 30 2010, 20:02
|
Группа: Участник
Сообщений: 3
Регистрация: 13-11-09
Пользователь №: 53 607

|
Почитал tn-net-sockets.pdf. Оказывается в Вашей реализации сокет можно перевести в неблокирующий режим. Не очень хорошее решение моей проблемы (напрасно будет тратится процессорное время), но все же лучше, чем ничего. Использую предоставленную функцию s_ioctl(). Сокет переводиться в неблокирующий режим не хочет. Смотрю исходные тексты и вижу, что в функции tcp_s_recv() проверка состояния so->so_state на SS_NBIO вообще отсутствует. Т.е. в этой версии tcp/ip стека(0.9) перевести открытый сокет в неблокирующее состояние нельзя.
|
|
|
|
|
Mar 31 2010, 18:00
|
Частый гость
 
Группа: Свой
Сообщений: 163
Регистрация: 24-08-05
Пользователь №: 7 937

|
Ф-ция 'select' создавалась для классических аппликаций - где нет multithreading и все происходит внутри одной ф-ции main(). Для малоформатных RTOS типа TNKernel 'select' "тяжеловат", да и в общем-то и не нужен (IMHO). В случае TNKernel/TN NET и использовании TCP sockets, task, в которой производится s_recv(), должна только принимать по s_recv() и не в коем случае не ждать какие-то другие события, очереди etc. Другие события, очереди etc. дожны ждать ДРУГИЕ task(s). Результат приема должен посылаться в ДРУГУЮ task (c помощью tn_queue например). При этом блокирующий прием работает естественным образом, а неблокирующий прием не нужен вообще (поэтому он и не реализован). Код void task_rx_socket_A_func(void * par) { for(;;) { rc = s_recv(g_s, (unsigned char*)g_rx_buf, RX_BUF_SIZE, 0); if(rc < 0) //-- SOCKET_ERROR { } else if(rc == 0) // closed by peer { } else //-- got some data { //--processing data, obtained by the s_recv(), or send it to another task } //----- } }
|
|
|
|
|
Apr 1 2010, 08:39
|
Группа: Участник
Сообщений: 3
Регистрация: 13-11-09
Пользователь №: 53 607

|
Цитата(yuri_t @ Mar 31 2010, 21:00)  В случае TNKernel/TN NET и использовании TCP sockets, task, в которой производится s_recv(), должна только принимать по s_recv() и не в коем случае не ждать какие-то другие события, очереди etc. Другие события, очереди etc. дожны ждать ДРУГИЕ task(s). Результат приема должен посылаться в ДРУГУЮ task (c помощью tn_queue например). При этом блокирующий прием работает естественным образом, а неблокирующий прием не нужен вообще (поэтому он и не реализован). Спасибо Юрий за комментарий. Я так и поступил. Хотя и добавил пару строк в tn_tcp_send.c для того, чтобы было соответствие с документацией. Код if(m) break; else { if(so->so_state & SS_NBIO) { splx(tnet, sm); return -EWOULDBLOCK; } else { splx(tnet, sm); tn_net_wait(&so->so_rcv.sb_sem); } } Спасибо еще раз за Вашу работу. Отличная RTOS и стиль написания очень ясный.
|
|
|
|
Сообщений в этой теме
yuri_t Вышла предварительная версия TN NET TCP/IP stack Aug 13 2009, 09:47 zltigo Цитата(yuri_t @ Aug 13 2009, 11:47) TN NE... Aug 13 2009, 13:18 Rst7 ЦитатаВышла предварительная версия TN NET TCP/IP s... Aug 13 2009, 13:44 yuri_t - по поводу портирования BSD
Идея была использо... Aug 13 2009, 14:50 zltigo Цитата(yuri_t @ Aug 13 2009, 16:50) IMHO,... Aug 13 2009, 15:18 yuri_t TN NET обновилась до версии 0.8.3.
TN NET TCP IP/... Aug 26 2009, 10:36 zltigo Цитата(yuri_t @ Aug 26 2009, 12:36) TN NE... Aug 26 2009, 10:56     Bender Цитата(yuri_t @ Mar 31 2010, 22:00) Ф-ция... Oct 13 2010, 10:38      grinux Цитата(Bender @ Oct 13 2010, 14:38) Мне н... Oct 13 2010, 10:55 LightElf Изучаю сорцы. Возникли несколько вопросов:
1) Можн... May 25 2010, 09:27 yuri_t Цитата(LightElf @ May 25 2010, 12:27) Изу... May 25 2010, 17:59  LightElf Цитата(yuri_t @ May 25 2010, 21:59) Можно... May 25 2010, 18:23 shista Во время разработки своего проекта столкнулся со с... Jun 4 2010, 20:32 grinux Добрый день.
Есть устройство, работающее по TCP с ... Sep 17 2010, 15:19 grinux Сравнил работу устройства с Wiznet(правое окно), т... Sep 20 2010, 17:07 grinux С Linux ситуация аналогичная, RST не воспринимает. Sep 21 2010, 10:41 Rst7 Перенес в топик посты из соседней темы по просьбе ... Sep 21 2010, 12:49 grinux Цитата(Rst7 @ Sep 21 2010, 16:49) Перенес... Sep 21 2010, 14:03 Rst7 Секундочку, а почему контрольная сумма TCP для пак... Sep 21 2010, 14:44 grinux Цитата(Rst7 @ Sep 21 2010, 18:44) Секундо... Sep 21 2010, 15:54 Rst7 QUOTE Ошибка в функции tcp_respond()
Если это у а... Sep 21 2010, 16:50 yuri_t Большое спасибо Григорию, Дмитрию и вообше всем по... Sep 22 2010, 11:33 grinux Юрий, вы не планируете в ближайшее время расширени... Sep 24 2010, 17:12 _NB Цитата(yuri_t @ Sep 22 2010, 14:33) Больш... Sep 27 2010, 13:11 Bender Цитата(yuri_t @ Sep 22 2010, 15:33) ... ... Sep 30 2010, 08:56 megajohn Цитата(yuri_t @ Sep 22 2010, 15:33) Поэто... Aug 6 2013, 15:32 yuri_t Что бы написать PPP, нужен соответствующий реальны... Sep 25 2010, 16:13 yuri_t Работа с >10 одновременно открытых TCP connect... Oct 13 2010, 15:34 LightElf QUOTE (yuri_t @ Oct 13 2010, 19:34) Работ... Oct 13 2010, 16:44  Bender Цитата(LightElf @ Oct 13 2010, 20:44) Хм.... Oct 13 2010, 18:52   LightElf QUOTE (Bender @ Oct 13 2010, 22:52) Да-да... Oct 14 2010, 13:10    YAM Цитата(LightElf @ Oct 14 2010, 16:10) BTW... Oct 15 2010, 17:16 yuri_t Каждое ТСР соединение требует приличного (опять-та... Oct 14 2010, 13:50 VslavX Цитата(yuri_t @ Oct 14 2010, 16:50) Каждо... Oct 14 2010, 14:24 grinux Подскажите, как использовать новый MAC адрес без п... Oct 14 2010, 15:49 Bender Хорошо, еще такой вопрос - прибор "отвалился... Oct 14 2010, 18:18 yuri_t Цитата(grinux @ Oct 14 2010, 18:49) Подск... Oct 14 2010, 18:42 Bender Цитата(yuri_t @ Oct 14 2010, 22:42) Я не ... Oct 15 2010, 05:07  DL36 Очень простая реализация только передачи по UDP, м... Oct 15 2010, 06:38   LightElf QUOTE (yuri_t @ Oct 14 2010, 17:50) Каждо... Oct 15 2010, 11:17 grinux Цитата(yuri_t @ Oct 14 2010, 22:42) Честн... Oct 15 2010, 07:13  Bender Цитата(grinux @ Oct 15 2010, 11:13) При п... Oct 15 2010, 08:02 yuri_t Чтобы иметь возможность неблокирующего приема в TN... Oct 17 2010, 06:01 AntonPV Прошу прощения,может есть такие,у кого есть опыт и... Nov 16 2010, 15:36 Pavel V. Я попытался портировать стек на процессор LPC1768,... Dec 27 2010, 02:42 prgjz Да, выложил в указанном топике. В tn_net_cfg.h
#d... Dec 27 2010, 11:26 spf Ошибочка обнаружена в проверке на multicast, не ра... Feb 1 2011, 18:47 yuri_t Цитата(spf @ Feb 1 2011, 22:47) Ошибочка ... Feb 2 2011, 15:30  spf Когда ожидается вариант со всеми доработками?
PS:... Feb 3 2011, 04:28   megajohn Цитата(spf @ Feb 3 2011, 08:28) Когда ожи... Jul 30 2013, 14:17    megajohn Цитата(megajohn @ Jul 30 2013, 18:17) Сам... Jul 31 2013, 03:25
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|