Как узнать, что у сокета уже есть адрес?
В общем, моё приложение пересоздает сокет, обновляя в каждом экземпляре клиента сокет user полученный от метода accept в случае если клиент до сих пор думает что соединение установлено, а сервер при попытке отправить клиенту команду выдаёт исключение:
ConnectionAbortedError: [WinError 10053] Программа на вашем хост-компьютере разорвала установленное подключение
Я также понимаю что клиент считает что по прежнему подключен, исходя из логов, там видно что отключения будто бы и не было, точнее поток dataOutputStream получает null pointer exception в случае если явно закрыть сокет сервера.
Мне нужно как-то узнать, выпало ли WinError 10053 из-за того что на стороне сервера перебой или же просто отключился клиент, но если клиент отключился и перебоя на стороне сервера не было, при попытке пересоздать сокет, выпадет исключение:
OSError: [WinError 10048] Обычно разрешается только одно использование адреса сокета (протокол/сетевой адрес/порт)
Это значит, что адрес у сокета есть и ос его не закрывала. Тут та я и хочу, на всякий, избежать исключения, проверив есть ли у сокета сервера уже привязанный адрес, но методу socket.getsockname() я не знаю следует ли доверять в моём случае, поэтому и ищу ответ на вопрос: Как проверить, удостовериться что адрес у сокета есть?
Ответы (1 шт):
socket.getsockname() - не даёт узнать привязан ли хост и порт к сокету, а лишь даёт инфу какие хост и порт вообще устанавливались при последнем успешном привязывании - socket.bind(host, port).
в моём случае, решением стало просто обработать 2е исключение, т.к оно происходит лишь если сокет сервера соединение не разрывал(явно и неявно тоже), а значит дело в клиенте.
Далее уже на стороне клиента требуется реализовать повторное соединение.