Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Скорость интернета и отправка sendto 
:(
    Опции темы
konshyn
Дата 7.10.2014, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



Код

#include <errno.h>
#include <fcntl.h>
#include <net/if.h>
#include <netinet/in.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>
#include <sys/epoll.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <sys/types.h>
#include <stdio.h>
#include <time.h>
#include <unistd.h>



int i = 0;
unsigned long long int error = 0;
unsigned long long int bytes = 0;
unsigned long long int count = 0;

void hsig(int sig) {
    printf("i = %d\n", i);
    printf("count = %llu\n", count);
    printf("bytes = %llu\n", bytes);
    printf("Mbytes = %f\n", ((float)bytes) / 1000000.0);
    printf("error = %llu\n", error);
    exit(EXIT_SUCCESS);
}

void set_of_signal_handlers() {
    struct sigaction action;
    memset((void*)&action, 0, sizeof(action));

    action.sa_handler = hsig;
    sigaction(SIGALRM, &action, 0);
    sigaction(SIGINT, &action, 0);
}



int main(int argc, char *argv[]) {
    if (argc == 1) {
        printf("NO!\n");
        return -1;
    }
    int sd = socket(PF_INET, SOCK_DGRAM, 0);
    if (sd < 0) {
        perror("socket()");
        return -1;
    }

    struct sockaddr_in servaddr;
    memset((void*)&servaddr, 0, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(47474);
    if (inet_aton("8.8.8.8", &servaddr.sin_addr) < 0) {
        perror("inet_aton()");
        return -1;
    }
    int result = 0;
    int val = fcntl(sd, F_GETFL, 0);
    if (val < 0) {
        perror("fcntl()");
        return -1;
    } 
    
    if (fcntl(sd, F_SETFL, val | O_NONBLOCK) < 0) {
        perror("fcntl()");
        return -1;
    }
   

    set_of_signal_handlers();
    char msg[256] = "Hello, google\n";

    alarm(1);
    for (i = 0; i < 2000000000; i++) {
        result = sendto(sd, msg, atoi(argv[1]), 0, (struct sockaddr *)&servaddr, sizeof(servaddr));
        if (result < 0) {
            if (errno == EAGAIN)
                error++;
        }
        else {
            bytes += result;
            count++;
        }
    }
    return 0;
}


Никак не могу понять. speedtest.net показывает скорость < 20Mbit/s. У меня же эта программа отправляет со скоростью ~11 МБайт/с (~90Мбит/c). Как так выходит?
Как получается, что например выгрузка из браузера на почту происходит с дозволенной скоростью, а в моей программе такого не происходит?


--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
xvr
Дата 9.10.2014, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(konshyn @  7.10.2014,  14:47 Найти цитируемый пост)
Как так выходит?

UDP сокет - это труба с одним концом (и с предохранительным клапаном в середине)  smile Вы туда что то заливаете, где то оттуда что то получают. Если эти 'где то' не успевают получать или труба переполнилась - это проблемы получателя, и вы о них даже не узнаете. Т.е. из ваших 90 MB/s до получателя в лучшем случае дойдет 11 MB/s, остальное будет слито за борт TCP/IP стеком (либо прямо вышим же, либо где то по дороге)  smile

Добавлено через 1 минуту и 19 секунд
Цитата(konshyn @  7.10.2014,  14:47 Найти цитируемый пост)
Как получается, что например выгрузка из браузера на почту происходит с дозволенной скоростью,

Браузер грузит через TCP, а там все строго - сколько залил столько и получат, это стек гарантирует

PM MAIL   Вверх
tzirechnoy
Дата 9.10.2014, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



Я знаю отличную шутку про UDP, но не факт, что она до вас дойдет. ©
PM MAIL   Вверх
konshyn
Дата 10.10.2014, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



xvr, я уже разобрался smile 
Слишком долго не было ответов.
Спасибо)


--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.1172 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.