Date: Sun, 14 Feb 1999 12:08:16 -0800 (PST) From: Matthew Dillon <dillon@apollo.backplane.com> To: freebsd-current@FreeBSD.ORG Subject: Weird piecemeal reads over socketpair() pipe breaks up small writes into even smaller reads. Message-ID: <199902142008.MAA07550@apollo.backplane.com>
next in thread | raw e-mail | index | archive | help
This is under -current. I don't know when it started, but I think whatever change is causing this was in the last week or two. This isn't a 'bug', per say, but it bothers me that a small 128 byte write() is being somehow broken apart into two smaller read()s. It isn't efficient, and it shouldn't be happening. -Matt Matthew Dillon <dillon@backplane.com> apollo:/home/dillon> ./x read 96 read 32 #include <sys/types.h> #include <sys/socket.h> #include <sys/un.h> /* unix domain sockets */ #include <netinet/in.h> /* internet sockets */ #include <netinet/tcp.h> /* TCP_NODELAY sockopt */ #include <stdio.h> #include <fcntl.h> int main(int ac, char **av) { int fds[2]; int n; char buf[128]; fd_set rfds; if (socketpair(PF_UNIX, SOCK_STREAM, IPPROTO_IP, fds) < 0) perror("socketpair"); fcntl(fds[0], F_SETFL, O_NONBLOCK); FD_ZERO(&rfds); FD_SET(fds[0], &rfds); if (fork() == 0) { sleep(1); write(fds[1], buf, sizeof(buf)); _exit(1); } select(fds[0] + 1, &rfds, NULL, NULL, NULL); while ((n = read(fds[0], buf, sizeof(buf))) > 0) printf("read %d\n", n); return(0); } To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199902142008.MAA07550>