2014-11-08 3 views
1

Я пытаюсь закрыть сокет, когда пользователь нажимает ctrl-c. Это прекрасно работает, если сокет все еще что-то делает. Но когда сокет выполняется с его работой и ничего не делает, и я нажимаю ctrl-c, ничего не происходит. Кстати, я использую Windows 8.1.Закрытие гнезда ctrl-c не работает

Вот мой код:

# close socket ctrl-c 
from signal import signal, SIGINT 
def sigint_received(signum, frame): 
s.close() 
exit(0) 
# register SIGINT callback 
signal(SIGINT, sigint_received) 

Когда я пытаюсь этот код у меня есть один и тот же вопрос:

OriginalExceptHook = sys.excepthook 
def NewExceptHook(type, value, traceback): 
if type == KeyboardInterrupt: 
    exit("\nExiting.") 
else: 
    OriginalExceptHook(type, value, traceback) 
sys.excepthook = NewExceptHook 

Любой знает, что это не так?

+0

вы можете показать код, в котором ваш сокет делает 'something' или «ничего»? что в петле? – Anzel

+0

Да, это время (1) {ожидание данных}. – user3801533

+0

Вы пробовали 'raise KeyboardInterrupt'? – Anzel

ответ

1

Re комментарии, использовать except для любого неожиданного KeyboardInterrupt поймает «Ctrl + C», так, что я имел в виду, как:

while 1: 
    try: 
     ... your stuff here ... 
     ... you should also break the while loop if no data is received ... 
    # and except it when Ctrl + C like happens 
    except KeyboardInterrupt: 
     print "Ctrl C or alike is pressed..."