2016-11-04 3 views
0

Я создал небольшой сервер C++/c http socket на малине pi. В прошлом я только отправлял/получал 1460 байтов данных за раз. Хотя недавно я понял, что могу отправить больше, чем это. Я бы хотел как можно быстрее отправить данные от сервера к клиенту. Coulda Я получаю размер окна (максимальный размер сегмента), который клиент может обрабатывать, чтобы я мог отправить этот объем данных. Скажем, если это было 8192, я бы хотел передать эту сумму на каждую отправку сокета сервера. Может ли кто-нибудь дать мне несколько указаний о том, как это сделать?TCP socket server C++/c размер окна

+1

Просто отправьте столько, сколько сможете на каждом 'send()'. Для этого вам не нужно знать размер окна. TCP позаботится о деталях. Используйте большой буфер приложения, скажем, 32 кбайта или более. – EJP

+0

Согласитесь с @EJP - клиент запрашивает размер буфера, который они хотят получить, - связь сокетов решает, что проходит, и когда – dbmitch

ответ

0

Использование getsockopt с TCP_MAXSEG:

int mss; 
socklen_t len = sizeof mss; 
getsockopt(fd, IPPROTO_TCP, TCP_MAXSEG, &mss, &len); 

От man tcp:

TCP_MAXSEG 
     The maximum segment size for outgoing TCP packets. In Linux 2.2 
     and earlier, and in Linux 2.6.28 and later, if this option is 
     set before connection establishment, it also changes the MSS 
     value announced to the other end in the initial packet. Values 
     greater than the (eventual) interface MTU have no effect. TCP 
     will also impose its minimum and maximum bounds over the value 
     provided. 

Согласно this question, это должно быть сделано после соединение установлено, в противном случае родовым по умолчанию значение будет возвращено.

Смежные вопросы