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

 
 
> Закрытие и открытие сокета TCP - как правильно?, Keil 4.72 стек Keil (STM32F107)
smk
сообщение Aug 8 2014, 10:20
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



При изменении номера порта требуется пересоздать сокет. При этом у меня получается что после смены порта коннект возможен как по старому номеру порта так и по новому номеру. Если котнроллер перегрузить то тогда соединение возможно только по новому значению порта. Отсюда вопрос как правильно закрыть/открыть сокет чтобы соединение было возможно только по новому значению номера порта.

Получаем новое значение номера ставим флаг:
Код
        PortNumber  = s[0];
        Flags.ChangePort = 1;


обрабатываем флаг:
Код
if(Flags.ChangePort)
    {
        poll_socket (SocketNumber);
        disconnect_tcp (SocketNumber);
        SetSocket ();
        Flags.ChangePort = 0;
    }


Код
void SetSocket (void)
{
    
    SocketNumber = tcp_get_socket (TCP_TYPE_SERVER | TCP_TYPE_DELAY_ACK | TCP_TYPE_FLOW_CTRL | TCP_TYPE_KEEP_ALIVE, 0, 65535, tcp_callback);

    
    if (SocketNumber != 0)
        {
            /* Start listening on TCP port DevEthInfo.CtrlPort */
            tcp_listen (SocketNumber, PortNumber);
        }    
}

void disconnect_tcp (U8 tcp_soc)
{
  
  /* This TCP connection is no longer needed */
  tcp_close (tcp_soc);
  /* Release TCP Socket in a polling function */
}

void poll_socket (U8 tcp_soc)
{
  int state;

  state = tcp_get_state (tcp_soc);
  if (state > TCP_STATE_LISTEN)
        {
    /* Closing procedure is on-going */
    return;
        }
  if (state == TCP_STATE_LISTEN)
        {
    /* Socket has TCP_TYPE_SERVER attribute */
    /* needs additional close request.      */
    tcp_close (tcp_soc);
        }
  /* A socket is in TCP_STATE_CLOSED state now. */
  tcp_release_socket (tcp_soc);
}


И еще такой вопрос.

Код
unsigned char remip[4] = {192,168,0,1};


IP адрес для клиента закрываемого соединения где брать?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 24th July 2025 - 22:10
Рейтинг@Mail.ru


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