2013-05-23 2 views
1

Я разработал приложение, которое использует сокеты над окнами. Он работает отлично, но через некоторое время соединение с Интернетом начинает терпеть неудачу, и, наконец, я получаю эту ошибку (10055), а это значит, что у моего приложения заканчивается буферное пространство.Код ошибки сокета Windows 10055

На самом деле, я думаю, что я использую только 2 сокета с кодом, который я сделал сам, но это правда, что я использую стороннюю библиотеку, о которой я понятия не имею, как она реализована.

Я читал, что есть много литературы об этой проблеме, поэтому я не единственный, кто страдает от нее, но я не могу понять, как ее решить или, по крайней мере, обходить ее, потому что когда она не удается, это заставляет компьютер потерять подключение к Интернету. Я пробовал это, поймав эту ошибку и когда это произойдет, делая WSACleanup(), WSAStartup(), даже если это не самая лучшая практика ... но мое приложение по-прежнему укладывается в эту ошибку.

Любой совет будет в значительной степени оценен.

+1

Опубликовать соответствующий код. – Rohan

+0

Можете ли вы опубликовать некоторые из ваших соответствующих исходников? Возможно, есть утечка памяти или что-то в этом роде. –

ответ

2

Обычно это происходит, когда вы правильно закрываете гнездо. Убедитесь, что у вас есть и shutdown и closesocket, когда вы хотите, чтобы закрыть сокет (http://msdn.microsoft.com/en-us/library/windows/desktop/ms741394(v=vs.85).aspx) Из MSDN - "Note To assure that all data is sent and received on a connection, an application should call shutdown before calling closesocket"

Перед вами bind сокет, вы можете использовать SO_REUSEADDR для setsocketopt, который будет "Allows the socket to be bound to an address that is already in use" (http://msdn.microsoft.com/en-us/library/windows/desktop/ms740476(v=vs.85).aspx)

Наконец, посмотрите этот блог - http://blogs.technet.com/b/yongrhee/archive/2011/12/19/how-to-troubleshoot-a-handle-leak.aspx

0

У вас есть один или несколько утечек ресурсов в вашем приложении.

Без кода я могу дать общие рекомендации.

Я рекомендую вам запустить Valgrind или аналогичные инструменты, чтобы помочь вам найти утечку ресурсов.

Другой способ - пересмотреть код. Если утечка началась недавно, вы можете найти ее, просмотрев только последние изменения.

MSDN имеет article on how to locate memory leaks using Visual Studio. (Не забудьте выбрать свою версию Visual Studio на связанной странице).