---
title: "Keep-alive 질문"
url: "https://maker.wiznet.io/forum/11040"
markdown_url: "https://maker.wiznet.io/forum/11040/md"
type: "Forum topic"
category: "Ethernet Chips"
author: "kds4715"
created: "2015-05-12T09:35:07+09:00"
last_activity: "2017-05-04T08:35:36+09:00"
language: "en"
views: 1127
replies: 2
source: "WIZnet Makers forum (https://maker.wiznet.io/forum/)"
---

# Keep-alive 질문

## Question

Asked by kds4715 on 2015-05-12 in Ethernet Chips.

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

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

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

자동으로 설정해도 와이어샤크로 보면 keep-alive 패킷이 안보입니다.
for(i=0; i&lt;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&lt;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&lt;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;
	}
}
```

}

## Replies

### Reply 1 by hjjeon0608, 2015-05-12

질문 2

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

### Reply 2 by irinakim, 2015-05-12

질문1

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

감사합니다. ![:slight_smile:](https://emoji.discourse-cdn.com/twitter/slight_smile.png?v=12)
irinakim

---

Source: https://maker.wiznet.io/forum/11040
