도와주세요!!
글 수 15,339
2008.01.25 01:07:40 (*.251.210.199)
8936
안녕하세요.
ARM 보드에서 소켓 프로그래밍을 하고 있습니다.
문제의 client 코드를 요약하면
while(1) {
write(client_sock, txbuf, sizeof(txbuf));
read(clinent_sock, rxbuf, sizeof(rxbuf);
}
입니다.
문제가 발생하는 부분은 read 함수 부분에서 server로부터 packet이 들어와야만 프로그램이 다음 코드로 진행이 된다는 것입니다. 즉 server로부터 packet이 없으면 read에 머물러 있습니다. 처음에 제가 생각한 것은 read 함수는 소켓이 비어 있으면 크기가 0이므로 0를 return하고 다음으로 넘어갈 거라고 생각했는데 그렇지 않은 것 같습니다. 제가 아직 초보라 read의 return 값을 살펴보았습니다만 error일 때는 -1, 그외는 읽은 buf의 크기인데 packet이 들어오면 0보다 큰 값인데 packet이 들어오지 않으면 어떻게 되는건가요?
검색을 해보고 있지만 시일이 촉박해 여기에 질문 올립니다.
많은 고수님들의 조언 부탁드립니다. :)
TCP/IP 소켓 통신은 시리얼 통신과 달리 수신된 자료가 없을 때 읽기를 실행하면,
자료가 수신될 때 까지 블록이 됩니다.
이렇게 블록되는 것을 막기 위해 상대쪽에서 먼저 전송된 자료가 있는지 확인한 후에
읽기를 수행해야 하는데 이렇게 처리하는 방법 중에 하나가 poll 을 이용하는 방법입니다.
수신된 자료가 있을 때 자료를 처리하는 것인 좋기 때문에 블록되지 않는 시리얼 통신에서도
역시 수신된 자료가 있는지를 확인하고 읽기를 수행합니다.
당행이도 poll() 함수를 사용하는 방법을 본 포럼의 [강좌 & 팁>>시리얼 프로그래밍]에 올렸습니다.
[강좌 & 팁>>시리얼 프로그래밍] 게시판의 poll() 을 검색해 보세요. ^^