буфер передачи

Тема в разделе "WASM.NETWORKS", создана пользователем Perre, 3 янв 2008.

  1. Perre

    Perre New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2007
    Сообщения:
    100
    День добрый, кто-нибудь знает как увеличить буфер передачи, у меня половина сообщений не доходят из за переполнение буфера.
    Сокет создаю так:
    Код (Text):
    1.      invoke socket,AF_INET,SOCK_STREAM,IPPROTO_IP; ;создаём сокет
    2.                     .if eax != INVALID_SOCKET   ; если нет ошибки
    3.                        mov hIchatSocket,eax
    4.                        invoke WSAAsyncSelect,eax,HendWnd,WM_SOCKETic,FD_ACCEPT or FD_READ or FD_CLOSE; функция указывает Windows посылать сообщения заданному окну от определенного сокета
    5.                        .if eax != INVALID_SOCKET  ;проверка на ошибку
    6.                          invoke htons,iPort; преобразовать номер порта в сетевой порядок байт
    7.                          mov sin.sin_port, ax
    8.                          mov sin.sin_family,AF_INET
    9.                          mov sin.sin_addr, INADDR_ANY
    10.                          invoke bind, hIchatSocket, addr sin, sizeof sin ; ассоциировать локальный адрес (представленный в структуре sin)  с сокетом
    11.                          .if eax != SOCKET_ERROR
    12.                             invoke listen,hIchatSocket, 5 ; устанавливает сокет в состояние, в котором он слушает порт на предмет входящих соединений
    13.                         .if eax != SOCKET_ERROR
     
  2. TarasCo

    TarasCo New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2005
    Сообщения:
    106
    TCP - надежный протокол, в нем информация не может теряться из-за переполнения буферов. Их размер может влиять только на скорость передачи и то в некоторых условиях. Необходимо искать ошибку в коде. Например:
    - для неблокирующего режима нет анализа ошибки EWOULDBLOCK
    - при вызове recv предполагается, что будет прочитано столько же байт, сколько было передано при вызове send.
     
  3. Perre

    Perre New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2007
    Сообщения:
    100
    У меня 2 протокола 1) IPPROTO_TCP 2) IPPROTO_IP но в данном случае и там и там буфер переполняется. TarasCo вы писали что не может быть переполнение буфера, а как тогда поступит система если все таки буфер заполнен, задержит выполнение send ?
    «- для неблокирующего режима нет анализа ошибки EWOULDBLOCK» такого у меня нет, что это такое и зачем оно ?
     
  4. Perre

    Perre New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2007
    Сообщения:
    100
    invoke send,HendlConnect,edi,eax,0
    .if eax == SOCKET_ERROR ; если получена ошибка (например, нет связи)
    invoke WSAGetLastError;узнать ошибку
    .if eax== WSAEWOULDBLOCK ;если не влезло в буфер
    не подскажите, как узнать, сколько именно байт не влезло в буфер (или сколько влезло)