При изменении номера порта требуется пересоздать сокет. При этом у меня получается что после смены порта коннект возможен как по старому номеру порта так и по новому номеру. Если котнроллер перегрузить то тогда соединение возможно только по новому значению порта. Отсюда вопрос как правильно закрыть/открыть сокет чтобы соединение было возможно только по новому значению номера порта.
Получаем новое значение номера ставим флаг:
Код
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 адрес для клиента закрываемого соединения где брать?
Живи днем так, чтобы ночью ты спал спокойно.