Estaba haciendo un bucle for recorriendo los items de un Listview para quitar los items correspondientes a conexiones cerradas, pero por algún motivo a veces se cerraban más de dos, entonces he hecho un bucle que recorre Winsock de lado a lado, pero no funciona:
Dim i As Long
For i = 0 To Winsock1.UBound
If Winsock1(i).State = sckClosed Then
ListView1.ListItems.Remove (i)
Winsock1(i).Close
End If
Next
Claro que se tienen que borrar porque ese codigo lo que hace es borrar el Item (i) del Listview que supuestamente es el mismo que el del winsock, lo cual no es correcto, por lo que te aconsejo utilizar el valor .tag del item del listview para ponerle la id del socket y asi poder borrar el item correcto, luego comparas y si es ese el mismo del que esta desconectado lo borras sino, pues sigues ;)
Dim i as long
For i = 0 to Winsock1.Ubound
If Winsock1(i).state = sckClosed then
For z = 1 to Listview1.listItems.count
If ListView1.ListItems.Item(z).tag = Winsock1(i).index then
ListView1.ListItems.remove i
end if
doevents
next z
end if
next i
y cuando añadas un item al Listview en el .tag del item le pones como valor el index del winsock
ListView1.add lalalala
ListView.tag = Index
Eso es todo, prueba y dime k tal ;)