A ver.. antes porque te habia funcionado y luego ya no?
Fijate que es lo mismo que cuando haces algo simple como:
Private Sub Form_Load()
ListView1.ListItems.Add = "hola"
ListView1.ListItems.Add = "chau"
MsgBox ListView1.ListItems.Item(1)
MsgBox ListView1.ListItems.Item(2)
End Sub
Es decir, cuando vos agregas un item va a quedar en el que sigue lo mismo para el WinSock1 asique no se cual el problema.
Ya que si se crea otro winsock(index), es decir porque hay otra conexion nueva, tu codigo creara otro item mas al listview.
El problema que talvez tienes es porque el listview empieza con 1 como ves en el codigo que te deje, y el Winsock con 0, pero eso se arregla facilmente restando 1.
Cuando seleccionas el item en el listview y haces click en un boton o lo que quieras hacer, para manejar el winsock es winsock(ListView1.SelectedItem.Index - 1)
Talvez no es lo que quieres pero el intento lo hice xD
Edit: cierto que decias que se modifica el orden de los items en el listview, bueno pero ahi entonces si usas lo del tag. Cuando se crea la conexion y vas a agregar un item nuevo como habiamos dicho, le agregas el tag enseguida de crearlo con listview1.listitems.items.tag = num
Y num podria ser una variable que ira aumentando en cada conexion nueva.. no se.