2011-09-30 4 views
4

루프에서 recv 함수를 사용하여 네트워크 데이터를 수신하지만 데이터 중간 루프 수신을 중지한다고 가정 해 보겠습니다. 루프를 깰 수는 있지만 데이터 수신을 중단하는 매우 깨끗한 방법처럼 보이지 않습니다.어떻게하면 recv 루프에서 빠져 나갈 수 있습니까?

데이터 수신을 완전히 멈추는 방법이 있습니까? 아니면 그냥 루프를 깨고 있습니까? 그것은 HTTP GET/POST 요청입니다. 루프에서 실연

do { 
    nDataLen = recv(mySocket, data, BUFFSIZE, 0); 
    if (nDataLen > 0) 
    { 
    /* Process Data */ 
    // I'd like to break out of the loop 
    // if something is found when processing the data 
    // But, I want to do this cleanly. 
    } 
} while (nDataLen != 0); 
+0

사용중인 코드를 볼 수 있습니까? –

+0

"데이터 수신 중지"란 무엇을 의미합니까? recv를 사용하면 수신 된 네트워크 버퍼에서 데이터를 가져 오거나 일부 데이터가 수신 될 때까지 대기 할 수 있습니다. recv를 호출하지 않는다고해서 데이터가 수신되지 않는다는 의미는 아닙니다. 그것은 여전히 ​​어딘가에 시스템 버퍼에 들어갑니다. –

+0

@VaughnCato 루프를 해독하기 위해 어떤 상처를 주겠습니까? 데이터가 어딘가에 시스템 버퍼에 있으면 얼마나 오래 머물러 있습니까? – Josh

답변

3

recv 루프를 중단해도 연결이 닫히지 않습니다. 일어나는 모든 일은 recv 호출을 멈추고 소켓에서 데이터 읽기를 중단하는 것입니다. 피어의 데이터가 여전히 소켓에 도착합니다. 깔끔하게 종료하려면 소켓 파일 설명자에서 close으로 전화하십시오.

0

이 정지 recv를 호출하는 방법입니다 : 여기

내가 사용하고 simplifed입니다. 다른 하나는 부울 should_stop을 포함하고 루프 상태에서이를 검사하는 것입니다. 그러나 소켓에 남아있는 것은 무엇이든 받아서 올바르게 닫아야합니다.

0

소켓이 필요하지 않은 경우 소켓을 닫고 루프를 벗어납니다.

관련 문제