-1
read()
함수를 사용하여 소켓에서 데이터를 읽습니다. 그러나 때로는 차단되고 프로그램이 중단됩니다.select 함수를 사용하여 블록 읽기 함수를 해제하는 방법
따라서 select()
함수를 사용하여 시간 제한을 설정했습니다. 하지만 여전히 문제가 있습니다.
그래서 두 기능을 어떻게 사용해야합니까?
내 코드는 다음과 같습니다 :
do{
rv = select(n, &readfds, NULL, NULL, &tv);
#ifdef WIFI_DEBUG_PRINT
ESP_LOGI(Display, "\nselect returns= %d\n",rv);
#endif
if (rv > 0)
{
if (FD_ISSET(s, &readfds))
{
bzero(recv_buf, sizeof(recv_buf));
read(s, recv_buf, sizeof(recv_buf)-1);
strcat(response_buffer,recv_buf);
printf("\nrecv_buf= %s\n",recv_buf);
}
}
_delay_ms_kt(100); //https://esp32.com/viewtopic.php?f=2&t=809&p=10191&hilit=esp_task_wdt_feed#p10191
//see above link to understand reason to put delay here.
//https://github.com/espressif/arduino-esp32/issues/595
//same.....
}while(rv>0);
내 프로그램이 제대로 작동하면 디버그 인쇄는 다음과 같습니다 : – kishan
'select()'는 전달한 매개 변수를 수정합니다. 각 루프 반복에서'readfds'와'tv'를 재설정해야합니다. 또한,'recv_buf'를 사용하기 전에 오류에 대한'read()'의 반환 값을 검사하지 않습니다. –