powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
24 сообщений из 74, страница 3 из 3
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
    #38589870
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tесли селект вернул "можно читать" происходит чтение.
Ты всерьёз считаешь, что "sendto" это чтение? У тебя в select третий параметр NULL - ты не
проверяешь можно ли писать в сокет, но пишешь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
    #38589872
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov А ещё лучше - не выпендриваться с неблокирующими сокетами вообще.
А все таки, что вы имели ввиду под "неблокирующими сокетами"?
...
Рейтинг: 0 / 0
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
    #38589908
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovDima Tесли селект вернул "можно читать" происходит чтение.
Ты всерьёз считаешь, что "sendto" это чтение?
Промолчу
Dimitry Sibiryakov У тебя в select третий параметр NULL - ты не
проверяешь можно ли писать в сокет, но пишешь.

Можно чуть подробнее.
...
Рейтинг: 0 / 0
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
    #38589912
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Топик напоминает художника, рисующего слона наощупь в темной комнате.
...
Рейтинг: 0 / 0
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
    #38589922
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася УткинА все таки, что вы имели ввиду под "неблокирующими сокетами"?
Сокеты, к которым применено ioctlsocket(FIONBIO). Они в сочетании с отсутствием проверки
на возможность записи в select() и кода возврата sendto (то есть именно так как писал
афтор в этом топике) приводят как раз к эффекту "пропадания пакетов". В другом топике у
автора есть проверка кода возврата, и нет вызова ioctl, так что можно сделать вывод, что
хотя сокеты у него и блокирующие, винда нагло выкидывает UDP данные если под них нет
свободного буфера.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
    #38589936
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivТопик напоминает художника, рисующего слона наощупь в темной комнате.
Если ты про меня, то вместо сарказма подскажи что почитать, если считаешь что отвечать долго. 10 лет осваивал фокс, столько же умничаю на фоксовом форуме, параллельно кое-что на си писал, только чтобы от winapi получить то что фокс не может, но не могу себе позволить 10 лет потратить на заработку звания гуры в низкоуровневом программировании, не надо оно мне, да и жить вечно не планирую. Поднял вопрос не чтобы чем-то похвастаться.
...
Рейтинг: 0 / 0
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
    #38589944
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TМожно чуть подробнее.
Dima Tвместо сарказма подскажи что почитать
Описание select() разве не самоочевидное чтиво?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
    #38589946
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovDima TМожно чуть подробнее.
Dima Tвместо сарказма подскажи что почитать
Описание select() разве не самоочевидное чтиво?..

Намеки выше понял, читаю... проще надо быть.
...
Рейтинг: 0 / 0
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
    #38590353
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

У тебя идеологические проблемы на мой взгляд. UDP про жизни теряет. А ты хочешь не терять. Надо учиться просто "жить" даже при условии силу тебя что-то теряется.
...
Рейтинг: 0 / 0
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
    #38590455
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivDima T,

У тебя идеологические проблемы на мой взгляд. UDP про жизни теряет. А ты хочешь не терять. Надо учиться просто "жить" даже при условии силу тебя что-то теряется.
Пока у меня проблемы "чайника", я уперся в то что пакет теряется на отправителе, sendto() срабатывает без ошибок, а виндовс молча убивает. Надо просто разобраться как быть уверенным что действительно пакет ушел. В идеале чтобы sendto() дождался отправки прежде чем что-то вернет (я считал что оно так и происходит). Думаю это идеологию не нарушает. Порешал пока добавив таймаут в select(), сам понимаю что коряво.
Пока времени нет, попозже буду изучать select(), ioctlsocket().

Мне бы какую-нибудь статью нормальную чтоб там все сразу вместе было собрано про работу с сокетами. Чтобы тонкости и ньюансы понять. Желательно на русском.
...
Рейтинг: 0 / 0
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
    #38590467
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока у меня проблемы "чайника", я уперся в то что пакет теряется на отправителе, sendto() срабатывает без ошибок, а виндовс молча убивает.

Так в UDP они по жизни теряются. что тут разбираться ?


Надо просто разобраться как быть уверенным что действительно пакет ушел.

Никак. Ты можешь только слать квитки с другой стороны сети.


В идеале чтобы sendto() дождался отправки прежде чем что-то вернет (я считал что оно так и происходит).


Так делай синхронный сокет. Правда, он тебе не даст гарантию, что он отправил, даст толко что он попытался отправить.
...
Рейтинг: 0 / 0
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
    #38591048
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TМне бы какую-нибудь статью нормальную чтоб там все сразу вместе было собрано про работу с сокетами. Чтобы тонкости и ньюансы понять. Желательно на русском.Я тебе уже давал ссылку на целый учебник. Там ВСЕ расписано. И как сокеты работают, и как p2p делать и несколько алгоритмов сетей разобрано.
Берешь и читаешь.
И на русском - тоже есть учебники. Не уверен что тот который я показал переводили, но и других хватает. Идешь в свой любимый магазин и ищешь там все что имеет в названии "TCP/IP".
...
Рейтинг: 0 / 0
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
    #38591058
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот исходник, если кто глянуть захочет, красным выделены добавленные проверки
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
int udp_dialog(sockaddr_in* addr, int buf_count)
{
	int err = 0;
	// инициализация сокета
	#if defined WIN32
	WSADATA wsaData;
	if(WSAStartup(MAKEWORD(2, 2), &wsaData) != NO_ERROR) {
		err = 1;
	}
	#endif
	SOCKET sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
	if (!err && sock == -1) {
		err = 2;
	}

	if(!err) {
		// блокирующий режим
		u_long iMode = 0; // 0 - Disabled Nonblocking mode
		int iResult = ioctlsocket(sock, FIONBIO, &iMode);
		if (iResult != NO_ERROR) {
		  printf("ioctlsocket failed with error: %ld\n", iResult);
		}
	}

	if(!err) {
 // Установка размера буфера исходящих
		int size = (1024*100) ;
		if (setsockopt(sock, SOL_SOCKET, SO_SNDBUF, (char *) &size, sizeof(size)) == -1 ) {
			printf("setsockopt SO_SNDBUF failed\n");
		}
// установка времени отправки, мс
		int time = 100;
		if (setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char *) &time, sizeof(time)) == -1 ) {
			printf("setsockopt SO_SNDTIMEO failed\n");
		}
	}

 	if(!err) {
		if(addr) {
			if(bind(sock, (SOCKADDR *) addr, (socklen_t) sizeof(sockaddr_in)) != 0) {
				err = 3;
			}
		} else {
			sockaddr_in addr_any;
			addr_any.sin_family = AF_INET;
			addr_any.sin_port = 0; //htons(0);
			addr_any.sin_addr.s_addr = 0; //htonl(INADDR_ANY);
			if(bind(sock, (SOCKADDR *) &addr_any, (socklen_t) sizeof(sockaddr_in)) != 0) {
				err = 3;
			}
		}
	}
	// выделение памяти под буферы приема
	buffer_t* buffers = NULL;
	if(!err && buf_count > 0) {
		buffers = (buffer_t*) calloc(buf_count, sizeof(buffer_t));
		if(!buffers) {
			err = 4;
		}
	}
	// прием и обработка сообщений
	if(!err) {
		buffer_t* buf_end = buffers + buf_count - 1; // последний буфер
		buffer_t* buf_read = buf_end; // буфер для приема
		buffer_t* buf_parse = buffers; // буфер для обработки
		bool queue_empty = true;
		timeval wait_time;
		wait_time.tv_sec = 0;
		wait_time.tv_usec = 0;
		// Ожидание сообщений
		while(true) {
			// проверка наличия входящего сообщания
			fd_set fd;	
			FD_ZERO(&fd);
			FD_SET(sock, &fd);
			int sel = select(sock + 1, &fd, NULL, NULL, &wait_time);
			wait_time.tv_usec = 0; // если поставить 0 не успевают отправляться
			if(sel == -1) {// SOCKET_ERROR
				err = 5;
				break;
			} else if(sel == 0 || buf_read == buf_parse) { // принимать нечего или некуда
				int size_to_send = 0;
				if(buf_parse->size != 0) {
					// обработка сообщения
					size_to_send = parse_udp_message(buf_parse->msg, buf_parse->size, buf_parse->addr);
					buf_parse->size = 0; // пометка буфера пустым
				} else {
					// отправка по собственной инициативе
					int sleep_msec = 100; // пауза 0.1 сек если отправитель не изменит
					size_to_send = send_udp_message(buf_parse->msg, buf_parse->addr, sleep_msec);
					if(size_to_send == 0 && sleep_msec > 0) { // установка паузы если слать нечего
						wait_time.tv_usec = sleep_msec < 1000 ? sleep_msec * 1000 : 999999;
					}
				}
				if(size_to_send >= UDP_MIN_SIZE) {
					fd_set fd;	
					FD_ZERO(&fd);
					FD_SET(sock, &fd);
					int sel = select(sock + 1, NULL, &fd, NULL, &wait_time);
					if(sel == 0) {
						printf("socket select error\n");
					}
					if(FD_ISSET(sock, &fd) == 0) {
						printf("socket send error\n");
					}

					// отправка UDP пакета
					int s = sendto(sock, buf_parse->msg, size_to_send, 0, (SOCKADDR *) &buf_parse->addr, sizeof(sockaddr_in));
					if(s != size_to_send) {
						printf("sendto() size error\n");
					}
				} else if(size_to_send < 0) {
					break; // выходим из цикла обработки сообщений
				}
				queue_empty = next_buffer(&buf_parse, buffers, buf_end, buf_read); // переходим к следующему буферу
			} else if(FD_ISSET(sock, &fd) == 0) {
				printf("socket read error\n");
			} else {
				// прием UDP пакета
				socklen_t addr_size = sizeof(sockaddr_in);
				int size = recvfrom(sock, buf_read->msg, UDP_MAX_SIZE, 0, (SOCKADDR *) &buf_read->addr, &addr_size);
				if(size >= UDP_MIN_SIZE) {
					// прочитано успешно
					buf_read->size = size;
					if(queue_empty) {
						buf_parse = buf_read;
					}
					next_buffer(&buf_read, buffers, buf_end); // переходим к следующему буферу
				}
			}
		}
	}

	// выход
	if(buffers) {
		free(buffers);
	}
	if(sock != -1) {
		#if defined WIN32
		closesocket(sock);
		#elif defined __linux__
		close(sock);
		#endif
	}
	#if defined WIN32
	WSACleanup();
	#endif
	return err;
}


Пробовал по отдельности и вместе:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
u_long iMode = 0; // 0 - Disabled Nonblocking mode
int iResult = ioctlsocket(sock, FIONBIO, &iMode);
if (iResult != NO_ERROR) {
...
int size = (1024*100) ;
if (setsockopt(sock, SOL_SOCKET, SO_SNDBUF, (char *) &size, sizeof(size)) == -1 ) {
...
int time = 100;
if (setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char *) &time, sizeof(time)) == -1 ) {
...
int sel = select(sock + 1, NULL, &fd, NULL, &wait_time); // перед sendto()
if(sel == 0) 
if(FD_ISSET(sock, &fd) == 0)
...
int s = sendto(sock, buf_parse->msg, size_to_send, 0, (SOCKADDR *) &buf_parse->addr, sizeof(sockaddr_in));
if(s != size_to_send)


Не помогло ничего. При этом ни один if() не сработал. Ни одного printf() об ошибке не вывел. Виндовс тупо сообщает что все отлично, но получатель стабильно получает 1-3 пакетов из 100 отправленных непрерывным потоком. Может что-то накосячил в коде проверок, делал по примерам MSDN.

Меняем таймаут select() с 0 на 1 мксек. и все отлично, 100 из 100 доставлено (на 127.0.0.1 и в локалке). Похоже это единственный вариант протолкнуть пакеты наружу. Оставляю этот костыль.

MasterZivТак в UDP они по жизни теряются. что тут разбираться ?
Похоже ты прав. Пусть теряются и не надо ломать голову где.
...
Рейтинг: 0 / 0
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
    #38591063
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlЯ тебе уже давал ссылку на целый учебник. Там ВСЕ расписано. И как сокеты работают, и как p2p делать и несколько алгоритмов сетей разобрано.
Я его даже скачал, только там 700 страниц, в любом случае почитаю.
...
Рейтинг: 0 / 0
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
    #38591148
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все что выше написано - это мой бред и домыслы. Сообщения доходят и рубятся получателем . Виндовс отправителя все честно отправил без пауз в 1 мкс.
Определил так: поставил на получателя wipfw и настроил запись в лог UDP. Вижу в логе 100 входящих пакетов. Получатель видит 1-2. Вывод: мой получатель с буферизацией чтения бесполезен.
...
Рейтинг: 0 / 0
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
    #38591227
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TВсе что выше написано - это мой бред и домыслы. Сообщения доходят и рубятся получателем . Виндовс отправителя все честно отправил без пауз в 1 мкс.


Ну, помнишь, что я говорил про слона
...
Рейтинг: 0 / 0
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
    #38591373
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дубль 2.
Dima TВсе что выше написано - это мой бред и домыслы. Сообщения доходят и рубятся получателем . Виндовс отправителя все честно отправил без пауз в 1 мкс.
Определил так: поставил на получателя wipfw и настроил запись в лог UDP. Вижу в логе 100 входящих пакетов. Получатель видит 1-2. Вывод: мой получатель с буферизацией чтения бесполезен.
Вася УткинDima Tпропущено...

setsockopt(SO_RCVBUF) оно?


Пробовали делать на принимающей стороне ?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 // Установка размера.
  int size_write = (1024*100) ;
  if ( setsockopt ( UDP_s,
                    SOL_SOCKET,
                    SO_RCVBUF,
                    &size_write,
                    sizeof(size_write)
                   ) == -1 )


Проблему решило?
...
Рейтинг: 0 / 0
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
    #38591446
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася УткинSO_RCVBUF
Проблему решило?
Не совсем. Эффекта никакого не дало в том виде как у меня написан прием.
Делал так (на 200 пакетов)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
	SOCKET sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
	if (!err && sock == -1) {
		err = 2;
	}
	if(!err) {
		// Установка размера буфера входящих
		int size = (1024*200) ;
		printf("set SO_RCVBUF = %d\n", size);
		if (setsockopt(sock, SOL_SOCKET, SO_RCVBUF, (char *) &size, sizeof(size)) == -1 ) {
			printf("setsockopt SO_RCVBUF failed\n");
		}
	}


Замена цикла приема на такой дает прием всех 100.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
while(true) {
	// прием UDP пакета
	sockaddr_in from;
	char msg[UDP_MAX_SIZE];
	socklen_t addr_size = sizeof(sockaddr_in);
	int size = recvfrom(sock, msg, UDP_MAX_SIZE, 0, (SOCKADDR *) &from, &addr_size);
	if(size >= UDP_MIN_SIZE) {
		//printf("%d: recvfrom()\n", clock());
		// прочитано успешно, обрабатываем
		int size_to_send = parse_udp_message(msg, size, from);
		if(size_to_send >= UDP_MIN_SIZE) {
			// отправка ответа
			if(sendto(sock, msg, size_to_send, 0, (SOCKADDR *) &from, sizeof(sockaddr_in)) <= 0) {
				printf("sendto() error\n");
			}
		}
	}
}


это при условии быстрой отработки parse_udp_message(). В данном случае у меня там только проверка номера пакета. Отправка происходит только после приема 100-го пакета.

Но стоит добавить printf() (закомментирован который) - начинает теряться половина пакетов. Но если добавить установку SO_RCVBUF то начинает принимать все 100.
Т.е. установка SO_RCVBUF что-то дает, но по какому-то хитрому алгоритму.
Скорее всего никакой хитрости нет, а есть изначальная заточка под прием потокового медиа трафика.

MasterZivНу, помнишь, что я говорил про слона
Да уж, слон не удался. Буду нового рисовать :)

Попробую взять за основу этот цикл приема, писать в нем свои буфера, а обработку и отправку вынести во второй поток.

Странно что select() в исходном варианте дал такой нездоровый эффект. Я ему даже таймаут повышал, чтобы только select() и recvfrom() работали пока поток идет. Надо еще поизучать что там реально происходит. ХЗ только как тестить если printf() все меняет.
...
Рейтинг: 0 / 0
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
    #38591661
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TНо стоит добавить printf() (закомментирован который) - начинает теряться половина пакетов. Но если добавить установку SO_RCVBUF то начинает принимать все 100.
Т.е. установка SO_RCVBUF что-то дает, но по какому-то хитрому алгоритму.
Скорее всего никакой хитрости нет, а есть изначальная заточка под прием потокового медиа трафика.
Какая ещё хитрость? Просто увеличил размер внутреннего кольцевого буфера UDP и теперь туда влезают все 100 пакетов, даже если ты не успел ни один из них вычитать.
...
Рейтинг: 0 / 0
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
    #38591854
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася УткинКакая ещё хитрость? Просто увеличил размер внутреннего кольцевого буфера UDP и теперь туда влезают все 100 пакетов, даже если ты не успел ни один из них вычитать.
Все верно. Опять я фантазирую. Нашел косяк, потери были уже в моем самодельном кэше. Попробую вообще от него избавиться.
...
Рейтинг: 0 / 0
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
    #38591881
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TВася УткинКакая ещё хитрость? Просто увеличил размер внутреннего кольцевого буфера UDP и теперь туда влезают все 100 пакетов, даже если ты не успел ни один из них вычитать.
Все верно. Опять я фантазирую. Нашел косяк, потери были уже в моем самодельном кэше. Попробую вообще от него избавиться.
А вам не критично если все таки иногда 1-2 или 10-20 пакетов будут теряться?
...
Рейтинг: 0 / 0
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
    #38591941
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася УткинDima Tпропущено...

Все верно. Опять я фантазирую. Нашел косяк, потери были уже в моем самодельном кэше. Попробую вообще от него избавиться.
А вам не критично если все таки иногда 1-2 или 10-20 пакетов будут теряться?
Не критично до 5% от общего количества.

Мой кэш может как-то помочь потери уменьшить? Мне 1 Мб буфера ОС с запасом хватит.
...
Рейтинг: 0 / 0
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
    #38591952
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TВася Уткинпропущено...

А вам не критично если все таки иногда 1-2 или 10-20 пакетов будут теряться?
Не критично до 5% от общего количества.

Мой кэш может как-то помочь потери уменьшить? Мне 1 Мб буфера ОС с запасом хватит.
Нет, не поможет. Ставьте 1-4МБ буфер UDP и убирайте свой кэш. Собственно всё :)
...
Рейтинг: 0 / 0
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
    #38592019
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася УткинНет, не поможет. Ставьте 1-4МБ буфер UDP и убирайте свой кэш. Собственно всё :)
Убрал свой, поставил 2 Мб. Все работает. Потестил через инет: 90-100 доходит при отправке потоком.

Всем спасибо за участие.

Сделаю паузу, займусь чтением умной книжки по сетям. Чтобы мелкие косяки вперемешку с недопонимаем не приводили к рисованию слонов.
...
Рейтинг: 0 / 0
24 сообщений из 74, страница 3 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]