---
title: "랜케이블이 단락시 tcpip 연결 상태값 문의"
url: "https://maker.wiznet.io/forum/10084"
markdown_url: "https://maker.wiznet.io/forum/10084/md"
type: "Forum topic"
category: "Ethernet Chips"
author: "shlee7151"
created: "2014-03-24T06:55:15+09:00"
last_activity: "2017-05-04T08:32:07+09:00"
language: "en"
views: 1221
replies: 0
source: "WIZnet Makers forum (https://maker.wiznet.io/forum/)"
---

# 랜케이블이 단락시 tcpip 연결 상태값 문의

## Question

Asked by shlee7151 on 2014-03-24 in Ethernet Chips.

TCPIP SERVER 로 구현된 w5100 입니다.

문의 사항은 STRESS TEST 진행중,
TCPIP 연결된 getSn_SR(ch) 값의 SOCK_ESTABLISHED (CONNECT) 상태에서
물리적으로 랜 케이블을 뺏을때 getSn_SR(ch) 함수가 SOCKET SESSION DISCONNECT 상태를 감지 하지 못하고,
계속해서 getSn_SR(ch) 값이 SOCK_ESTABLISHED 남아 있습니다.

현재 이문제로 인하여 같은 포트를 재접속 불가능 하게 되었습니다.

TCPIP CONNECT 중 랜 케이블 단락시 확인할 수 있는 방법이 무엇인지 알고 싶습니다.

관련 소스 첨부 합니다.

감사합니다.

/**
@brief loopback test using TCP(server mode)
*/
void loopback_tcps(
u_char ch /**&lt; channel(socket) index */
)
{
int len;
//u_char * data_buf = (u_char*) TX_BUF; // 0x1100, RX_BUF = TX_BUF+TX_RX_MAX_BUF_SIZE
extern PACKET packet;
extern u_char data_buf[BUFF_SIZE];

```
switch (getSn_SR(ch))
{
case SOCK_ESTABLISHED:						/* if connection is established */
	if(bchannel_start[ch]==1)
	{
		Debug("%d : Connected by %s(%u)\r\n",ch,inet_ntoa(GetDestAddr(ch)),GetDestPort(ch));
		bchannel_start[ch] = 2;
	}

	if ((len = getSn_RX_RSR(ch)) > 0) 			/* check Rx data */
	{
		if (len > BUFF_SIZE) len = BUFF_SIZE;	/* if Rx data size is lager than TX_RX_MAX_BUF_SIZE */
								/* the data size to read is MAX_BUF_SIZE. */

		len = recv(ch, data_buf, len);			/* read the received data */
		

		//Debug("uart_recv %d\r\n", len);

		//check packet 
		len = ToPacket(data_buf, len, &packet);

		//Debug("ToPacket %d\r\n", len);

		if(len > 0)	{

			if(packet.SPD_ID == 0xFF || packet.SPD_ID == DeviceInfo.Spd_ID)	
			{

				len = process_packet(&packet);

				if(len > 0)	{
					len = BUFF_SIZE;
					len = ToStream(&packet, data_buf, len);
					if(len > 0)	{
						send(ch, data_buf, len);				/* send the received data */
					}
				}
			}

		}

	}
	break;



case SOCK_CLOSE_WAIT:                           		/* If the client request to close */
	Debug("%d : CLOSE_WAIT\r\n", ch);
	disconnect(ch);
	bchannel_start[ch] = 0;
	break;


case SOCK_CLOSED:                                               /* if a socket is closed */
	if(!bchannel_start[ch]) 
	{
		Debug("%d : Loop-Back TCP Server Started.\r\n",ch);
		bchannel_start[ch] = 1;
	}
	if(socket(ch,Sn_MR_TCP,6001+ch,0x00) == 0)    /* reinitialize the socket */
	{
		Debug("\a%d : Fail to create socket.\r\n",ch);
		bchannel_start[ch] = 0;
	}
	else
		listen(ch);
	
	break;
}
```

}

---

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