Co powraca Python's socket.recv () w przypadku gniazd nieblokujących, jeśli do czasu przekroczenia limitu czasu nie zostaną odebrane żadne dane?

Zasadniczo czytałem to w kilku miejscachsocket.recv() zwróci to, co potrafi odczytać, lub pusty ciąg znaków sygnalizujący zamknięcie drugiej strony (oficjalne dokumenty nawet nie wspominają, co zwraca, gdy połączenie zostanie zamknięte ... świetnie!). To wszystko jest w porządku i świetnie nadaje się do blokowania gniazd, ponieważ to wiemyrecv() powraca tylko wtedy, gdy rzeczywiście jest coś do odebrania, więc gdy zwraca pusty ciąg, toMUSI znaczy, że druga strona zamknęła połączenie, prawda?

Dobrze, ale co się stanie, gdy moje gniazdo nie będzie blokowało? Przeszukałem trochę (może nie dość, kto wie?) I nie wiem, jak powiedzieć, kiedy druga strona zamknęła połączenie za pomocą gniazda nieblokującego. Wydaje się, że nie ma metody ani atrybutu, który by nam o tym powiedział i porównał wartość zwracanąrecv() na pusty ciąg wydaje się absolutnie bezużyteczny ... czy tylko ja mam ten problem?

Jako prosty przykład, powiedzmy, że limit czasu mojego gniazda jest ustawiony na 1.2342342 (jakakolwiek nieujemna liczba, którą lubisz tutaj) sekund i dzwonięsocket.recv(1024), ale druga strona nie wysyła niczego w tym drugim okresie czasu. Therecv() wywołanie zwróci pusty łańcuch i nie mam pojęcia, czy połączenie nadal stoi czy nie ...

questionAnswers(4)

yourAnswerToTheQuestion