저는 소켓 프로그래밍 (그리고 다소 파이썬에 대해서도)에 익숙하지 않습니다. 그리고 (서버 측에서) 원하는 방식대로 작동하도록 선택 타임 아웃을 얻는 데 문제가 있습니다. 클라이언트가 연결되기 전에 시간 초과는 정상적으로 작동합니다. 나는 1 초의 값을주고, 1 초마다 타임 아웃이 끝난다.select에서 timeout 매개 변수를 올바르게 사용하는 방법은 무엇입니까?
일단 클라이언트가 연결되면 제한 시간이 만료되었음을 알리기 위해 1 초 정도 기다리지 않습니다. 최대한 빨리 루프를 실행하고 제한 시간이 만료되었다고 알려줍니다. 여기에 내 코드의 조각이다 : 이것은 내 문제가 어디에 있는지 충분한 코드 인 경우
while running:
try:
self.timeout_expired = False
inputready, outputready, exceptready = select.select(self.inputs, self.outputs, [], self.timeout)
except select.error, e:
break
except socket.error, e:
break
if not (inputready):
# Timeout expired
print 'Timeout expired'
self.timeout_expired = True
# Additional processing follows here
잘 모르겠어요, 그래서 당신은 더 볼 필요가 있다면 알려 주시기 바랍니다. 기본적으로 클라이언트가 연결되면 최소한 이으로 표시되어 1 초의 시간 제한을 무시하고 가능한 한 빨리 실행되며 "시간 초과가 만료되었습니다."라고 계속해서 알려줍니다. 내가 뭘 놓쳤는가?
감사합니다.
편집 : 분명히해야합니다 ... "inputready"는 서버에 연결하거나 서버로 데이터를 보내는 클라이언트의 입력과 서버의 표준 입력을 나타냅니다. select에서 반환 된 다른 변수는 서버 측 변수 일 뿐이며, CLIENT가 응답하는 데 너무 오래 걸리는지 여부를 감지하기 위해 노력하고 있으므로 inputready가 비어 있는지 확인합니다.
그리고 만약'이미 입력 됐습니까? ' –
inputready 인 경우 서버는 inputready에있는 각 소켓을 반복하고 추가 처리를 수행합니다. – MattM