Как совершить ошибку/выйти из операции чтения, которая заблокирована в сокете, где нет данныхLinux

Ответить
Anonymous
 Как совершить ошибку/выйти из операции чтения, которая заблокирована в сокете, где нет данных

Сообщение Anonymous »

В Linux, когда сокет закрыт, операция чтения вызывает ошибку, но в BSD этого не происходит. Этот простой код работает по-разному в разных ОС

Код: Выделить всё

import socket
import threading
# Function to handle reading from the socket
def read_from_socket(sock):
while True:
try:
data = sock.recv(1024)
if not data:
continue
print(f"Received data: {data}")
except socket.error as e:
print(f"Socket error: {e}")
break
print("Read thread exiting")
# Create a socket and connect to a server
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('example.com', 80))
print ("connected to socket")
# Start the read thread
read_thread = threading.Thread(target=read_from_socket, args=(sock,))
read_thread.start()
# Close the socket after some time
import time
time.sleep(20)
print ("closing the socket")
sock.close()
print ("closed the socket")
# Join the read thread to wait for its completion
read_thread.join()
print("Main thread exiting")
как можно выйти из потока чтения в BSD

Подробнее здесь: https://stackoverflow.com/questions/792 ... here-is-no
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»