2010-12-11 178 views
16

He escrito una aplicación de multidifusión IP en C#. Se compila bien, pero en tiempo de ejecución de esta línea:"No se pudo realizar una operación en un socket porque el sistema no tenía suficiente espacio en el búfer o porque la cola estaba llena"

sock.SetSocketOption(SocketOptionLevel.IP, 
        SocketOptionName.AddMembership, 
        new MulticastOption(IPAddress.Parse("224.100.0.1"))); 

produce una excepción socket no controlada:

Una operación en un socket no pudo realizarse debido a que el sistema carecía de suficiente espacio de memoria intermedia o porque una cola estaba completo

He buscado el error en Google y la gente ha sugerido eliminar el conmutador de 3GB (mi SO es Windows 7) que puede haber sido habilitado. Lo hice, pero todavía recibo el mismo error. ¿Cual podría ser el problema?

Respuesta

6

Esto parece suceder cuando se agotan los recursos (¿sockets?) O la memoria. En el símbolo del sistema ejecutar: netstat -ab

No estoy seguro de que el límite de socket es. Actualmente estoy peleando un problema como este por mi cuenta.

Notas sobre los límites del zócalo: http://support.microsoft.com/kb/196271

3

que tienen este mismo error, pero sólo en Windows 7. Si me quedo mi misma aplicación de multidifusión en Vista funciona. Aparece un diálogo del sistema para desbloquear el comportamiento de la aplicación, pero se ejecuta. Esta es probablemente una cosa cambiada de permisos de red en win7. Todavía estoy buscando una solución. Si alguien más encuentra uno, por favor publique.

4

Puede encontrar este mensaje de error si se exceden los límites de recursos. A System.Net.Sockets.Socket implementa IDisposable. ¿Estás desechando tu (s) toma (s) una vez que terminaste con ellos?

Dejarlos por el recolector de basura es una forma excelente de perder recursos.

+0

Tengo este mismo problema con las publicaciones HTTP. Hacer una gran cantidad de ellos en sucesión rápida parece sobrecargar IIS a pesar de que los estoy desechando correctamente con 'using'. Ideas? – jocull

+0

@jocull ¿Dónde está tu aplicación? ¿En una máquina cliente hablando con IIS o alojado por IIS? –

+2

http://smallvoid.com/article/winnt-tcpip-max-limit.html podría ayudar a explicar los límites impuestos por el sistema operativo también. –

7

Podría ser agotamiento de puerto. Cuando la (s) aplicación (es) realiza demasiadas conexiones salientes en un corto espacio de tiempo o no elimina adecuadamente las conexiones salientes, se le agotan los puertos.

Here es el enlace para más larga explicación y una manera de diagnosticar el problema

1

que tenía el mismo error en Windows Server 2008. En mi caso, después de reiniciar el servidor (con 2 años de tiempo de actividad) problema resuelto.

0

que he tenido el mismo problema (a.k.a de error 10055) cuando intenta conectarse a una base de datos MySQL local. Creo que debe aumentar la cantidad de puertos dinámicos que permite el sistema operativo.

La solución que funcionó para mí fue mencionada here Creo que también puede serle útil, ya que está usando Windows. ¡Mucha suerte!

Cuestiones relacionadas