Как сказать, мертво ли соединение в Python

Может ли доступ к данным из-за ожидаемой могилы?

В большинстве случаев да. Вызов delete не обнуляет память.

Обратите внимание, что поведение не определено. Используя определенные компиляторы, память может быть обнулена. Когда вы вызываете delete, происходит то, что память помечена как доступная, поэтому в следующий раз, когда кто-то сделает новый , память может быть использована.

Если вы думаете об этом, это логично - когда вы сообщаете компилятору, что вас больше не интересует память (используя delete ), почему компьютер должен тратить время на его обнуление.

57
задан directedition 20 March 2009 в 19:31
поделиться

3 ответа

Это зависит от того, под чем Вы подразумеваете "отброшенный". Для сокетов TCP, если другой конец закрывает соединение любой через завершение () или завершение процесса, Вы узнаете путем чтения конца файла или получения ошибки чтения, обычно errno, устанавливаемый на любое 'соединение, сброшенное одноранговым узлом', операционной системой. Для Python Вы считаете строку нулевой длины, или socket.error будет брошен, когда Вы попытаетесь читать или записать из сокета.

36
ответ дан 7 November 2019 в 16:04
поделиться

Из ссылки Jweede отправил:

исключение socket.timeout:

This exception is raised when a timeout occurs on a socket
which has had timeouts enabled via a prior call to settimeout().
The accompanying value is a string whose value is currently
always “timed out”.

Вот демонстрационный сервер и клиентские программы для модуля сокета от документы Python

# Echo server program
import socket

HOST = ''                 # Symbolic name meaning all available interfaces
PORT = 50007              # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
while 1:
    data = conn.recv(1024)
    if not data: break
    conn.send(data)
conn.close()

И клиент:

# Echo client program
import socket

HOST = 'daring.cwi.nl'    # The remote host
PORT = 50007              # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send('Hello, world')
data = s.recv(1024)
s.close()
print 'Received', repr(data)

На странице документов в качестве примера я вытянул их от, существуют более сложные примеры, которые используют эту идею, но вот простой ответ:

Принятие Вы пишете клиентскую программу, просто поместите весь свой код, который использует сокет, когда это подвергается риску отбрасываться в блоке попытки...

try:
    s.connect((HOST, PORT))
    s.send("Hello, World!")
    ...
except socket.timeout:
    # whatever you need to do when the connection is dropped
14
ответ дан hochl 7 November 2019 в 16:04
поделиться

Если я не ошибаюсь, это обычно обрабатывается через тайм-аут .

4
ответ дан Jon W 7 November 2019 в 16:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: