감사합니다.
사용하는 함수는 loopback_tcps()를 사용하고 있읍니다.
while(1) {
loopback_tcps(0,PORT_NUM,data_buf,0);
loopback_tcps(1,PORT_NUM,data_buf,0);
loopback_tcps(2,PORT_NUM,data_buf,0);
loopback_tcps(3,PORT_NUM,data_buf,0);
loopback_tcps(4,PORT_NUM,data_buf,0);
loopback_tcps(5,PORT_NUM,data_buf,0);
loopback_tcps(6,PORT_NUM,data_buf,0);
loopback_tcps(7,PORT_NUM,data_buf,0);
그리고…함수내에서는
void loopback_tcps(SOCKET s, uint16 port, uint8* buf, uint16 mode)
{
uint32 len;
switch(getSn_SSR(s)) // check SOCKET status
{ // ------------
case SOCK_ESTABLISHED: // ESTABLISHED?
if(getSn_IR(s) & Sn_IR_CON) // check Sn_IR_CON bit
{
printf2(PORT_DEBUG,“%d : Connect OK\r\n”,s);
setSn_IR(s,Sn_IR_CON); // clear Sn_IR_CON
LcdPrintf2L(4,“S%d Cli.Connected OK.”,s);
}
if((len=getSn_RX_RSR(s)) > 0) // check the size of received data
{
len = recv(s,buf,len); // recv
if(len) {
/// debug socket
//printf2(PORT_DEBUG,“sock/len : [%d]/[%d],”,s,len);
buf[len] = 0;
//printf2(PORT_DEBUG,“data : [%s]\r\n”,buf);
// call
GsParsing(s,buf,len);
}
//if(len !=send(s,buf,len)) // send
//{
// printf2(PORT_DEBUG,"%d : Send Fail.len=%d\r\n",s,len);
//}
}
GsSendReq128DataSend(s,buf);
break;
위와 같이 파싱함수와 전송함수 두개를 추가하여 보내고 있읍니다.
클라이언트는 다른분이 PC에서 프로그래밍하고 있는데…
GsSendReq128DataSend() 이 함수가 실행되면 1초간 데이타를 계속 보냅니다.
데이타를 보내던중에 패킷을 클라이언트로부터 수신하게 되면 전송이 홀딩이 됩니다.
PC측에서도 원인을 몰라서 보드쪽을 의심하는데…
W5100은 송수신 무관하다는 것이죠??
전 PC측에서 이더넷측 에서 수신을 안하기에 보내질 못해서 멈추는 것으로 보고 있읍니다.
PC측에서는 버퍼 리드 타임아웃이 걸려 루틴을 빠져나왔다고 하네요…
어떤 문제 일까요? ^^
민순.