2012-06-15 4 views
-1

C 소켓을 사용하여 iPhone 용 응용 프로그램을 만들고 있습니다. 어떤 시점에서 나는 NSThread (블로킹)이라는 별도의 recvfrom을 수행하고 있으며이 작업을 "차단 해제"하고 스레드에서 정상적으로 종료하는 방법을 모릅니다. shutdown() 또는 close()을 호출해도 아무런 변화가 없으며 recvfrom은 계속 응답하지 않습니다. 그것을 차단 소켓으로 유지하고 제대로 닫고 스레드에서 종료 할 수있는 방법이 있습니까?rcvfrom에서 차단 된 UDP 소켓을 닫는 방법

나는이 recvfrom는 "차단 해제"를 발생하지 않는 코드의 내 작품이다 아무것도 시도하지 비난하고 있습니다으로 :

- (void) stopScan 
{ 
    NSLog(@"stopScan !!!"); 
    [activityIndicator stopAnimating]; 
    shutdown(broadcastSocket, SHUT_RDWR); 
    close(broadcastSocket); 
    [discoveryThread cancel]; 
    [discoveryThread release]; 
    discoveryThread = nil; 
    [scanTimer invalidate]; 
    broadcastSocket = 0; 
    scanTimer = nil; 
} 

콜링 :이 내가 지금 무엇을 가지고

shutdown() 또는 close() 만 차단 해제되지 않습니다.

답변

1

실제로 아무 것도 시도하지 않은 것 같습니다. 그냥 닫아. recvfrom()은 오류와 함께 종료됩니다.

+0

좋아요. 나는 바보. 감사합니다. – solgar

+0

그래서이 질문/답변에 더 많은 것을 추가하려면 어떻게 든 오류 검사 코드를 제거한 것으로 보이고 내 응용 프로그램은 recvfrom의 연속 호출로 무한 루프에 들어가서 응용 프로그램의 다른 위치에서 다른 문제를 일으켰습니다. – solgar

+0

@solgar 그렇게하지 마십시오 ;-) – EJP

관련 문제