В C # .NET я пытаюсь избежать состояния гонки, при котором клиент сокетов пытается подключиться к конечной точке, прежде чем сервер сокетов будет связан с этой конечной точкой и прослушивает ее.
Один из способов сделать это - если клиент пытается вызвать метод connect()
до того, как сервер прослушивает конечную точку, клиент ждет в течение неопределенного времени, пока сервер не прослушивает.
Глядя в документацию по именованным каналам , я вижу, что метод NamedPipeClientStream.ConnectAsync()
будет "асинхронно подключаться к ожидающему серверу с бесконечным тайм-аутом период". Да, это то, что я хочу.
Однако, глядя в документацию на сокеты , используя метод Socket.ConnectAsync()
, похоже, нет способа установить период ожидания. При написании тестовой программы я вижу, что EADDRNOTAVAIL
(ошибка Linux 99) выдается, если клиент действительно пытается подключиться до того, как сервер прослушивает конечную точку.
Есть ли способ заставить метод Socket.ConnectAsync()
ждать, пока сервер сокета не прослушивает конечную точку, а не просто выдать исключение?