Этот вызов должен возвращаться только через очень короткое время, но на некоторых машинах он необъяснимо занимает очень близкое расстояние до 1 секунды. Кто-нибудь видел эту проблему. Я использую loopback-адрес, поэтому сеть должна быть вне картинки.Вызов WinSock closeesocket() занимает несколько секунд на некоторых компьютерах
ответ
Проблема, вероятно, где-то внутри реализации сокетов. С точки зрения ОС вызов closesocket
(или CloseHandle
) эквивалентен выпуску «устройства» для драйвера. В основном драйверы обрабатывают этот запрос немедленно (синхронно), прерывая все (потенциальные) выдающиеся операции ввода-вывода, если необходимо. Однако «глупые» драйверы могут заблокировать вас до что-то завершено.
Вот что я хотел бы сделать:
- Try прекратить свою программу (на диспетчер задач). Требуется ли время для его прекращения? (если так - кажется, что он заблокирован водителем).
- Если вы говорите о потоковом сокете (т. Е. TCP или аналогичном) - попробуйте использовать параметр
SO_DONTLINGER
. То есть укажите, что вы не хотите ждать, пока все ожидающие данные будут отправлены одноранговому узлу.
Немного сложно сказать, требуется ли 1 секунда для завершения процесса с помощью диспетчера задач, так как есть другие задержки. SO_DONTLINGER не должен иметь никакого эффекта в данном конкретном случае, поскольку данные не передаются через сокет, он просто устанавливается и затем закрывается. SO_DONTLINGER ожидает, пока все данные будут отправлены. –
@ Jesse Pepper: Помимо отправки неотправленных данных, в TCP есть «церемония» закрытия соединения изящно, в которое входит некоторый пинг-понг с пакетами «FIN». Я не уверен, но, возможно, «SO_DONTLINGER» включает и это. То есть с этим флагом он прерывает соединение с 'RST' – valdo
- 1. Алгоритм Floodfill занимает несколько секунд
- 2. UnicodeEncodeError только на некоторых компьютерах
- 3. Объекты, перекрывающиеся на некоторых компьютерах
- 4. Sinch onShouldSendPushData занимает несколько секунд, чтобы уволят
- 5. Приложение Остановитесь на несколько секунд в некоторых системах клиента
- 6. Почему Silverlight не воспроизводится на некоторых компьютерах?
- 7. вызов self.tableView.reloadData занимает 10-15 секунд
- 8. Обратный вызов имени pipe занимает 10 секунд?
- 9. Socket.SendAync занимает несколько секунд, чтобы завершить
- 10. Конструктор SNMP занимает несколько секунд, чтобы вернуть
- 11. MySQL InnoDB: удаление занимает несколько секунд
- 12. Выполнение приложения медленное, на некоторых клиентских компьютерах?
- 13. MFMessageComposeViewController первый Alloc занимает несколько секунд
- 14. Мод переписать только на некоторых компьютерах
- 15. Javascript onclick не вызывается на некоторых компьютерах
- 16. CLLocationManager.requestLocation() занимает около 10 секунд
- 17. Winsock TCP-прослушиватель остается в состоянии LISTENING после успешного вызова closeesocket()
- 18. JQuery $ .post не работает на некоторых компьютерах
- 19. Streamreader не находит файл на некоторых компьютерах
- 20. RelayCommand не стреляя на некоторых компьютерах
- 21. WSDualHttpBinding не будет работать на некоторых компьютерах
- 22. Me.Activate() не работает на некоторых компьютерах
- 23. Моя программа не запускается на некоторых компьютерах
- 24. Excel Comboboxes удваивается на некоторых компьютерах
- 25. @ font-face не работает на некоторых компьютерах
- 26. ThreeJS: Raycasts отключен на некоторых компьютерах
- 27. addGlobalMonitorForEventsMatchingMask не работает на некоторых компьютерах
- 28. jQuery offset() не работает в некоторых браузерах, на некоторых компьютерах
- 29. InternetOpen - первый вызов медленный на некоторых машинах
- 30. Firebase onAuthStateChanged обратный вызов занимает 20 + секунд иногда
Возможно, программное обеспечение антивирусного программного обеспечения вмешивается? –
Не очень полезное антивирусное/брандмауэр-программное обеспечение, если оно просто добавляет задержку. У меня отключен мой брандмауэр, и для проверки на вирусы не работает резидентный экран. Такое же поведение. –
Некоторые аудиовизуальные средства и продукты безопасности имеют тенденцию вводить поведение с ошибкой. Если вы в противном случае застряли, возможно, стоит удалить их все - в то время как в сети, конечно! - для двойной проверки. –