День добрый, кто-нибудь знает как увеличить буфер передачи, у меня половина сообщений не доходят из за переполнение буфера. Сокет создаю так: Код (Text): invoke socket,AF_INET,SOCK_STREAM,IPPROTO_IP; ;создаём сокет .if eax != INVALID_SOCKET ; если нет ошибки mov hIchatSocket,eax invoke WSAAsyncSelect,eax,HendWnd,WM_SOCKETic,FD_ACCEPT or FD_READ or FD_CLOSE; функция указывает Windows посылать сообщения заданному окну от определенного сокета .if eax != INVALID_SOCKET ;проверка на ошибку invoke htons,iPort; преобразовать номер порта в сетевой порядок байт mov sin.sin_port, ax mov sin.sin_family,AF_INET mov sin.sin_addr, INADDR_ANY invoke bind, hIchatSocket, addr sin, sizeof sin ; ассоциировать локальный адрес (представленный в структуре sin) с сокетом .if eax != SOCKET_ERROR invoke listen,hIchatSocket, 5 ; устанавливает сокет в состояние, в котором он слушает порт на предмет входящих соединений .if eax != SOCKET_ERROR
TCP - надежный протокол, в нем информация не может теряться из-за переполнения буферов. Их размер может влиять только на скорость передачи и то в некоторых условиях. Необходимо искать ошибку в коде. Например: - для неблокирующего режима нет анализа ошибки EWOULDBLOCK - при вызове recv предполагается, что будет прочитано столько же байт, сколько было передано при вызове send.
У меня 2 протокола 1) IPPROTO_TCP 2) IPPROTO_IP но в данном случае и там и там буфер переполняется. TarasCo вы писали что не может быть переполнение буфера, а как тогда поступит система если все таки буфер заполнен, задержит выполнение send ? «- для неблокирующего режима нет анализа ошибки EWOULDBLOCK» такого у меня нет, что это такое и зачем оно ?
invoke send,HendlConnect,edi,eax,0 .if eax == SOCKET_ERROR ; если получена ошибка (например, нет связи) invoke WSAGetLastError;узнать ошибку .if eax== WSAEWOULDBLOCK ;если не влезло в буфер не подскажите, как узнать, сколько именно байт не влезло в буфер (или сколько влезло)