nc captures 1024 bytes

John-Mark Gurney gurney_j at resnet.uoregon.edu
Mon Aug 27 16:46:06 PDT 2007


Weiguang Shi wrote this message on Mon, Aug 27, 2007 at 16:37 -0700:
> To get the larger packets, I have to fix another hard-coded "1024" 

This is also a performance problem on slower machines...  nc should be
fixed to use larger buffers, maybe to the tune of 64KB if not larger...
W/ TSO, doing 64KB writes makes sense as it could send the entire
segment off to the card...

> 630 readwrite(int nfd)
> 631 {
> 632         struct pollfd pfd[2];
> 633         unsigned char buf[8192];
> 634         int n, wfd = fileno(stdin);
> 635         int lfd = fileno(stdout);
> 636         int plen;
> 637 
> 638         plen = jflag ? 8192 : 1024;
> 639 
> 
> ----- Original Message ----
> From: Weiguang Shi <wgshizz at yahoo.com>
> To: freebsd-net at freebsd.org
> Sent: Monday, August 27, 2007 4:05:26 PM
> Subject: nc captures 1024 bytes
> 
> Hi,
> 
> My system is FreeBSD 6.2. I sent a UDP datagram of 1464 bytes to port 
> 1234 where nc was waiting
>     % nc -n -u -l 1234 >tt
> 
> Afterwards, the size of tt, however, was only 1024  bytes.
> 
> I noticed this piece of code in nc
> 
> 341                         if (uflag) {
> 342                                 int rv, plen;
> 343                                 char buf[8192];
> 344                                 struct sockaddr_storage z;
> 345 
> 346                                 len = sizeof(z);
> 347                                 plen = jflag ? 8192 : 1024;
> 348                                 rv = recvfrom(s, buf, plen, MSG_PEEK,
> 349                                     (struct sockaddr *)&z, &len);
> 350                                 if (rv < 0)
> 351                                         err(1, "recvfrom");
> 
> Why 1024 instead of something like 1500-20-8=1472?

-- 
  John-Mark Gurney				Voice: +1 415 225 5579

     "All that I will do, has been done, All that I have, has not."


More information about the freebsd-net mailing list