блокирование send'а

Тема в разделе "WASM.NETWORKS", создана пользователем rain, 24 май 2007.

  1. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    Можно ли как-нибудь сделать блокирование сенда по отправке какого-нибудь лимита байт до того момента пока на другой стороне не выполнится recv хотябы с буфером 1 байт. Пробовал:
    Код (Text):
    1. setsockopt(sock, SOL_SOCKET, SO_SNDBUF...
    не получается вообще, во-первых getsockopt с этими-же опциями возвращает 2000h, а реальная блокировка (по умолчанию) происходит при выполнении следующего цикла больше 0x80f4 раз:
    Код (Text):
    1.     for (int k = 0; k < 0x00080f4; k++)
    2.     {
    3.         res = send(sock, "a", 1, 0);
    4.     }
    во вторых при установке этого параметра всё равно сокет не блокируется при нужном установленном объёме буфера
    мне бы буфер по меньше установить =\
     
  2. was_log_a

    was_log_a New Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    97
    нужно установить размер исходящего буфера в 0, тогда send (в блокирующем режиме) не будет возвращать управление, пока все данные, отправленные send-ом, не будут получены удаленным компом. Но при этом все равно не гарантируется,что это произойдет после вызова recv на удаленном компе
     
  3. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    setsockopt(sock, SOL_SOCKET, SO_SNDBUF.. этими опциями?
     
  4. was_log_a

    was_log_a New Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    97
    да, именно этими

    все вышесказанное относится к Winsock, насчет *nix систем не знаю