При использовании функций winsock api : Send, Recv и размере буфера 2048 байт приложение работает нормально, скорость обмена данными между сокетами равна примерно 1 мегабайт. При попытке увеличения размера буфера передачи более 2048 байт приложение даёт сбои и перестаёт работать.
Функция setsockopt также не оказывает влияния на размер буфера.
Что мешает увеличить размер буфера передачи, пожалуйста помогите решить данную проблему ?!
Анатолий 03.07.2010 Visual Basic 6 (SP6)
Код на передачу:
Public Function sSend(ByVal s&, ByVal vMessage) As Long
 im TheMsg() As Byte, sTemp$
TheMsg = ""
Select Case VarType(vMessage)
Case 8209 'byte array
sTemp = vMessage
Case 8 'string, if we recieve a string, its assumed we are linemode
sTemp = StrConv(vMessage, vbFromUnicode)
Case Else
sTemp = CStr(vMessage)
sTemp = StrConv(vMessage, vbFromUnicode)
End Select
TheMsg = sTemp
If UBound(TheMsg) > -1 Then
sSend = send(s, TheMsg(0), (UBound(TheMsg) - LBound(TheMsg) + 1), 0)
End If
End Function
Где vMessage буфер данных для передачи (до 2048 байт все работает превосходно)
Код на приём данных:
Public Function sGet(ByVal Sck& As String
 im x As Long, ReadBuffer(1 To BufMyData1) As Byte, strCommand As String
strCommand = ""
 o
x = recv(Sck, ReadBuffer(1), BufMyData1, 0)
If x > 0 Then
strCommand = strCommand + Left$(StrConv(ReadBuffer, vbUnicode), x)
End If
If x <> BufMyData1 Then Exit Do
Loop
sGet = strCommand
End Function
Где BufMyData1 размер буфера приёма данных размер которого равен или больше буфера передачи данных vMessage. До vMessage = 2048, размер буфера BufMyData1 можно определять любой, равный или больше vMessage. При vMessage = 2048 размер буфера BufMyData1 не имеет значения, приложение не работает.
Протокол используется TCP/IP. Переполнение буфера исключено, так как сервер отправляет клиенту следующую порцию данных только по запросу клиента. Похоже что дело не в программе, а в каком то внутреннем ограничении(глюке) VB6. Как это победить не знаю...