quando ci sono messaggi veloci sul socket entra nel while

While (socket.Connected)
'If socket.Connected = True Then
If (socket.Poll(-1, SelectMode.SelectRead)) Then
Dim BytedaLeggere As Integer = Me.socket.Receive(buf)
Messaggio = ""
Messaggio = Encoding.UTF8.GetString(buf)

passa If (socket.Poll(-1, SelectMode.SelectRead)) Then e poi il programma si blocca su
Dim BytedaLeggere As Integer = Me.socket.Receive(buf) dando come errore l'host remoto ha interrotto la connessione.
questo succede quando ci sono messaggi veloci da parte del client. ieri avevo bypassato il problema ( nella versione non multithread) tramite un try per gestire l'errore e non fare bloccare l'esecuzione del programma.
il codice di "ieri" è:

' Dim buffer(1024) As Byte
' Dim codice As String = ""
' If Listener.Pending = True Then
' Dim MessaggioGenerico As String = ""
' Dim MessaggioGenerico1 As String = ""
' Dim sok As Socket = Listener.AcceptSocket
' Dim IpClient As String = CType(sok.RemoteEndPoint, IPEndPoint).Address.ToString

' If sok.Connected = True Then
' Try
' Dim BytedaLeggere As Integer = sok.Receive(buffer)
' Messaggio = Encoding.ASCII.GetString(buffer, 0, BytedaLeggere)