2013-03-16 2 views
0

W. Richard Stevens의 Unix Network Programming을 읽습니다. 블로킹 연결 호출이 중단되면 비 블로킹 연결에 대한 선택으로 '선택'을 사용할 수 있다고 저자는 말합니다.차단 '연결'시스템 호출이 중단되었습니다.

혼란 스럽습니다. 내가 비 차단 연결을 호출하고 새 socktfd를 선택해야하거나 이전 차단 연결 호출에 전달되는 이전 socketfd를 선택해야합니까?

그리고 신호에서 SA_RESTART 플래그와 함께 전달되는 경우 'connect'가 재시작 가능하다고 알립니다. 그렇다면 차단 연결 중단 사례를 완전히 무시할 수 있습니까?

+0

프롬프트에서 'man 7 signal'을 입력하십시오. EINTR을 검색하십시오. 그것은 모든 것을 설명합니다. 프로세스에서 신호를 트리거 할 수있는 코드가 없다면 걱정할 필요가 없습니다. 또는 EINTR을 일시적인 오류 (EAGAIN, EWOULDBLOCK과 유사)로 간주하고 정상적으로 복구 할 수 있습니다. – selbie

+0

'새로운 sockfd'는 무엇입니까? 소켓 당 하나만 있습니다. connect()를 호출해도 새로운 Le는 생성되지 않습니다. – EJP

답변

0

차단 호출을 사용하는 경우 오류 코드를 확인하고 중단 될 경우 EINTR이 될 오류 코드를 기반으로 다시 시도해야합니다. 그렇지 않으면 선택을 사용하십시오. 시간 초과, 오류 또는 읽기 쓰기 신호의 경우에만 선택하십시오.

+0

EINTR을 의미하지 않습니까? – selbie

+0

죄송합니다. 내 실수. 고쳤다. –

+0

내가 알아 내려고하는 것은 이것입니다. 응용 프로그램이 자체 코드 내에서 신호를 호출하지 않으면 EINTR을 실제로 사용할 수 있습니까? 아니면 소켓 코드를 방해하는 이러한 신호 인터럽트를 생성하는 몇 가지 일반적인 라이브러리가 있습니까? – selbie

관련 문제