WIZnet Developer Forum

TCP Client Connect()이후 send() 에러

다음과 같이 TCP 전송을 시도하는데, connect() 와 send() 사이에 delay가 없으면 전송되지 않습니다.
300ms이상의 delay가 있으면 정상적으로 전송이 됩니다. 이 delay가 너무 큰 관계로 심각한 문제가 발생하고 있습니다. 해결방안이 없을까요?
SPI 동작 속도는 12Mbps입니다.

	for(uint8_t k=0; k<10; k++)
	{
		socket(0, Sn_MR_TCP, 80, SF_IO_NONBLOCK);

		connect(0, SERVER_IP, 80);

		_delay_ms(300);					// **** 적당한 딜레이가 없으면 전송 불가 *** //
		
		sprintf(phpdata, "GET /ethernet/data.php?num=%d HTTP/1.1\r\n", k);
		send(0, phpdata, strlen(phpdata));
		send(0, host, strlen(host));
		send(0, "Connection: close\r\n", 19);
		send(0, "\r\n", 2);
		
		close(0);
	}

해결했습니다. ^^

socket(0, Sn_MR_TCP, 80, SF_IO_NONBLOCK);

이부분이 문제였네요. SF_IO_NONBLOCK 값 때문에 connect 내부에서 계속 SOCK_BUSY 값을 반환하더군요.

socket(0, Sn_MR_TCP, 80, 0);

바꾸니까 지연 없이 잘 되네요.
제 글을 읽고 고민해주신 분들 모두 감사합니다. ^^

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