2013-04-20 1 views
1

여기에서이 항목에 대한 몇 가지 질문을 읽었지만 간단한 대답을 얻을 수 없었습니다. 더 쉬울 수 있도록 약간의 코드를 제공 할 것입니다. Python : 소켓 연결이 아직 열려 있습니다.

import socket 

irc = socket.socket (socket.AF_INET, socket.SOCK_STREAM) 

irc.connect((network, port)) 

# Do the rest of the connection (set nick, user, join chan) 
# Okay, now we're connected 

while True: 

    doAllTheBotStuff() 

은 내가 while True: 루프를 나누기 !quit 명령이있다. 하지만 때로는 핑 시간 초과 또는 인터넷 충돌과 같은 다른 이유로 인해 철저히 구별됩니다. 내가 원했던 것은 다음과 같습니다 :

while True: 

    doAllTheBotStuff() 

    if not stillConnected(): 
     break 

어떻게하면 stillConnected() 기능을 수행 할 수 있습니까?


읽기/쓰기 :

나는 나의 로봇을위한 클래스를 만들었다, 그러나 희망 당신은 쓰기는 항상에 대한 응답 모든 정보

# READING 

ready = select.select([self.irc], [], [], 1) 
if ready[0]: 
    temp = self.irc.recv(4096) 
    # Here I handle the reading. Parse commands and all that stuff. 

없이 이해할 수있는 읽습니다. 나는 당신이해야 할 모든 줄 뒤에 뭔가를 추가하는 것입니다 생각

def send_irc_cmd(self, cmd, args): 
    self.irc.send(cmd+" :"+args+"\r\n") 
+0

연결 해제는 일반적으로 소켓에서 읽을 때 EOF로 감지되거나 'socket.error'가 발생하면 감지됩니다. 소켓 읽기/쓰기를 수행하는 코드를 포함해야합니다. – Aya

+0

질문에 그것의 일부를 포함시킬 것입니다 – pasadinhas

+0

세부 사항이 필요하면 업데이트하십시오 :) – pasadinhas

답변

1

...

temp = self.irc.recv(4096) 

... temp이 빈 문자열 인 경우 검사 :이 기능을 사용 이것은 원격 호스트가 연결을 닫았 음을 나타내며이를 사용하여 루프를 벗어납니다.

코드 샘플이 불완전하거나 실제 코드가 단순화되어 있기 때문에 필자는 더 정확하고 구체적이지 않습니다.

+0

마치 작동하는 것 같습니다 :) – pasadinhas