uint16client:1;//0001 данное соединение не сервер, а клиент!
uint16client_reconnect:1;//0002 вечный реконнект
uint16srv_reopen:1;//0004 открытие нового соединения более max_conn ведет к закрытию наиболее старого соединения.
uint16pcb_time_wait_free:1;//0008 проверка на макс кол-во и уничтожение pcb с TIME_WAIT при вызове disconnect() (иначе pcb TIME_WAIT 60 сек http://www.serverframework.com/asynchronousevents/2011/01/time-wait-and-its-design-implications-for-protocols-and-scalable-servers.html)
uint16nagle_disabled:1;//0010 выключение nagle
uint16rx_buf:1;//0020 прием в буфер, используется ручное управление размером окна TCP
uint16rx_null:1;//0040 отключение вызова func_received_data() и прием в null (устанавливается автоматически при вызове tcpsrv_disconnect())
uint16tx_null:1;//0080 отключение вызова func_sent_callback() и передача в null (устанавливается автоматически при вызове tcpsrv_disconnect())
uint16wait_sent:1;//0100 ожидет завершения/подтверждения передачи от lwip
uint16busy_bufo:1;//0200 идет обработка bufo
uint16busy_bufi:1;//0400 идет обработка bufi
// далее идут биты не относящиеся к работе tcp_srv_conn
uint16user_flg1:1;//0800 для нужд процедур уровнем выше (использован в tcp2uart.c)
uint16user_flg2:1;//1000 для нужд процедур уровнем выше (пока свободен)
uint16user_option1:1;//2000 для нужд процедур обработки переменных (использован для hexdump, xml_mdb в web_int_callbacks.c)
uint16user_option2:1;//4000 для нужд процедур обработки переменных (использован для xml_mdb в web_int_callbacks.c)
typedefvoid(*func_disconect_calback)(TCP_SERV_CONN*ts_conn);// соединение закрыто
typedeferr_t(*func_listen)(TCP_SERV_CONN*ts_conn);// новый клиент
typedeferr_t(*func_received_data)(TCP_SERV_CONN*ts_conn);// принято всего ts_conn->sizei байт, лежат в буфере по ts_conn->pbufi, по выходу принимается обработанных ts_conn->cntri;
typedeferr_t(*func_sent_callback)(TCP_SERV_CONN*ts_conn);// блок данных передан
TCP_SERV_CONN*conn_links;// указатель на цепочку активных соединений, при инициализации или отсуствии активных соединений = NULL
structtcp_pcb*pcb;// начальный pcb [LISTEN] если сервер, иначе NULL
func_disconect_calbackfunc_discon_cb;// функция вызываемая после закрытия соединения, если = NULL - не вызывается
func_listenfunc_listen;// функция вызываемая при присоединении клиента или коннекта к серверу, если = NULL - не вызывается
func_sent_callbackfunc_sent_cb;// функция вызываемая после передачи данных или наличию места в ip стеке для следушей передачи данных, если = NULL - не вызывается (+см. флаги)
func_received_datafunc_recv;// функция вызываемая при приеме данных, если = NULL - не вызывается (+см. флаги)
structt_TCP_SERV_CFG*next;// следующий экземпляр структуры сервера/клиента