WIZnet Developer Forum

Keep-alive 질문

keep-alive 기능을 살리려고 하는데 잘 안되네요.

===질문 1:
수동으로 이렇게 해도 안되고… 1초간격으로 호출.

for(i=0; i<8; i++)
{
setSn_CR(i,Sn_CR_SEND_KEEP);
}

자동으로 설정해도 와이어샤크로 보면 keep-alive 패킷이 안보입니다.
for(i=0; i<8; i++)
{
//setsockopt(i, SO_KEEPALIVEAUTO, 1);
setSn_KPALVTR(i,1);
}

===질문2:
w5500이 서버모드 상태에서 클라이언트로 부터 데이터를 수신하면 왜 Timeout 이 발생하는건지요?

void WizChip_Poll(void)
{
u8 sn=0, i;
u16 size;
com_port=network;
for(sn=0; sn<8; sn++)
{
switch(getSn_SR(sn))
{
case SOCK_ESTABLISHED :
i=getSn_IR(sn);
if(i)
{
//Connection & Data Receive
if(i & Sn_IR_RECV)
{
setSn_IR(sn, Sn_IR_RECV);
if((size = getSn_RX_RSR(sn)) > 0)
{
if(size > DATA_BUF_SIZE) size = DATA_BUF_SIZE;
size = recv(sn,WorkBuf,size);
if(size == 0) return;
SockNo= sn;
for(i=0; i<size; i++)
{
//데이터수신
}
}
}
//Time Out
if(i & Sn_IR_TIMEOUT)
{
setSn_IR(sn, Sn_IR_TIMEOUT);

			}
		}
		 break;
	  case SOCK_CLOSE_WAIT :
		 size=disconnect(sn); 
		 break;
	  case SOCK_INIT :
		 size = listen(sn);
		 break;
	  case SOCK_CLOSED:
		 size=socket(sn,Sn_MR_TCP,SetData.PORT+sn,0x00);
		 break;
	  default:
		 break;
	}
}

}

질문 2

Timeout이 발생하였다면 코드상에서 어디선가 send명령이 내려진 겁니다.
데이터를 수신하였다는 이유로는 timeout이 발생하지 않습니다.

질문1

keep alive기능을 사용하시려면
한번 이상의 데이터 전송이 이뤄어진 후 사용가능합니다.

감사합니다. :slight_smile:
irinakim

Copyright © 2017 WIZnet Co., Ltd. All Rights Reserved.