[closed] объединяются пакеты на SOCK_STREAM при очень частом send(3)

Phoenix

описание и исходники тут:
Вкратце: очень быстро посылаем пакеты. (каждые 50мс по 1000байт).
Хочется их получать по мере высылки.
А реально получается, что только первые приходят так, как ожидалось, а остальные отсылаются раз в 100мс одним куском.
Понятно, что это SOCK_STREAM и логически ничего криминального. Хочется понять, как убрать такую умную оптимизацию.
видно, что прошло 6 пакетов, общей длиной 10000байт.
 

16:49:26.270254 IP 172.16.3.50.39452 > 172.16.3.50.4950: Flags [.], ack 1, win 8960, options [nop,nop,TS val 2819420 ecr 563566877], length 0
16:49:26.270268 IP 172.16.3.50.39452 > 172.16.3.50.4950: Flags [P.], ack 1, win 8960, options [nop,nop,TS val 2819420 ecr 563566877], length 1000
16:49:26.370182 IP 172.16.3.50.4950 > 172.16.3.50.39452: Flags [.], ack 1001, win 8960, options [nop,nop,TS val 563567377 ecr 2819420], length 0
16:49:26.370192 IP 172.16.3.50.39452 > 172.16.3.50.4950: Flags [P.], ack 1, win 8960, options [nop,nop,TS val 2819920 ecr 563567377], length 1000
16:49:26.470186 IP 172.16.3.50.4950 > 172.16.3.50.39452: Flags [.], ack 2001, win 8960, options [nop,nop,TS val 563567877 ecr 2819920], length 0
16:49:26.470195 IP 172.16.3.50.39452 > 172.16.3.50.4950: Flags [P.], ack 1, win 8960, options [nop,nop,TS val 2820420 ecr 563567877], length 2000
16:49:26.570192 IP 172.16.3.50.4950 > 172.16.3.50.39452: Flags [.], ack 4001, win 8960, options [nop,nop,TS val 563568377 ecr 2820420], length 0
16:49:26.570201 IP 172.16.3.50.39452 > 172.16.3.50.4950: Flags [P.], ack 1, win 8960, options [nop,nop,TS val 2820920 ecr 563568377], length 2000
16:49:26.670196 IP 172.16.3.50.4950 > 172.16.3.50.39452: Flags [.], ack 6001, win 8960, options [nop,nop,TS val 563568877 ecr 2820920], length 0
16:49:26.670209 IP 172.16.3.50.39452 > 172.16.3.50.4950: Flags [P.], ack 1, win 8960, options [nop,nop,TS val 2821420 ecr 563568877], length 2000
16:49:26.770212 IP 172.16.3.50.4950 > 172.16.3.50.39452: Flags [.], ack 8001, win 8960, options [nop,nop,TS val 563569377 ecr 2821420], length 0
16:49:26.770221 IP 172.16.3.50.39452 > 172.16.3.50.4950: Flags [P.], ack 1, win 8960, options [nop,nop,TS val 2821920 ecr 563569377], length 2000
 

А посылалось 10 пакетов по 1000 байт.
# ./client
interval 50
Client-The remote host is: 127.0.0.1
Client-The socket sockfd is OK...
Server-Using 127.0.0.1 and port 4950...
Client-The connect is OK...
1286532442689382;Client- send is OK...
11 51057 # первая, сколько работал send вторая - время между send в микросекундах
1286532442740449;Client- send is OK...
6 52418
1286532442792877;Client- send is OK...
4 51987
1286532442844869;Client- send is OK...
3 51995
1286532442896871;Client- send is OK...
4 51995
1286532442948871;Client- send is OK...
3 51995
1286532443000873;Client- send is OK...
3 51994
1286532443052871;Client- send is OK...
3 51997
1286532443104874;Client- send is OK...
3 51996
1286532443156886;Client- send is OK...
4 51985
Client-Closing sockfd
  

vall

man tcp / TCP_NODELAY

Phoenix

спасибо. Сейчас как раз играюсь с разными флагами.

Phoenix

Спасибо ещё раз. Несколько раз натыкался на "Nagle buffering algorithm". Было ощущение, что это как раз оно. и вот собственно теперь это как раз оно и оказалось.
Оставить комментарий
Имя или ник:
Комментарий: