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