From owner-freebsd-bugs Sat Feb 28 09:51:54 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id JAA29579 for freebsd-bugs-outgoing; Sat, 28 Feb 1998 09:51:54 -0800 (PST) (envelope-from owner-freebsd-bugs@FreeBSD.ORG) Received: from alpha.ksu.ru (adel@alpha.ksu.ru [193.232.252.33]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id JAA29559 for ; Sat, 28 Feb 1998 09:51:07 -0800 (PST) (envelope-from adel@ksu.ru) X-Pass-Through: Kazan State University network Received: (from adel@localhost) by alpha.ksu.ru (8.8.4/8.8.4) id UAA07054 for freebsd-bugs@freebsd.org; Sat, 28 Feb 1998 20:50:28 +0300 (MSK) Date: Sat, 28 Feb 1998 20:50:28 +0300 (MSK) From: Adel Abushaev Message-Id: <199802281750.UAA07054@alpha.ksu.ru> To: freebsd-bugs@FreeBSD.ORG Subject: Possible ioctl() implementation mistake Sender: owner-freebsd-bugs@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org The following is bug report and test program. First ioctl() is before recvfrom(), after client sent 512 bytes to the SOCK_DGRAM destination. On all FreeBSD's which I find -ioctl() returns 528 bytes, and I read 512, then ioctl() returns 0. Source code for test (lcient & server) at the end of message. Adel Abushaev , --------------------------------------------------------------------------- FreeBSD jungle 2.2.1-RELEASE FreeBSD 2.2.1-RELEASE #0: Sat Feb 7 16:16:08 MVW 1998 az@jungle:/usr/src/sys/compile/jungle i386 ioctl: 528 recv: 512 ioctl: 0 --------------------------------------------------------------------------- FreeBSD shell.cifnet.com 2.2.5-STABLE ioctl: 528 recv: 512 ioctl: 0 --------------------------------------------------------------------------- FreeBSD lapkin.rosprint.ru 3.0-CURRENT FreeBSD 3.0-CURRENT #0: Fri Jan 16 18:05:15 MSK 1998 sandy@lapkin.rosprint.ru:/m/FreeBSD-current/src/sys/compile/LAPKIN i386 ioctl: 528 recv: 512 ioctl: 0 --------------------------------------------------------------------------- Linux irc 2.0.33 #5 Wed Feb 4 04:43:29 WAT 1998 i586 unknown ioctl: 512 recv: 512 ioctl: 0 --------------------------------------------------------------------------- SunOS alpha 5.5 Generic_103093-03 sun4c sparc SUNW,Sun_4_40 ioctl: 512 recv: 512 ioctl: 0 --------------------------------------------------------------------------- /* client.c */ #include #include #include #include #include #include void main() { int sockfd; struct sockaddr_in servaddr_in; char buffer[512]; memset(&servaddr_in, 0, sizeof(struct sockaddr_in)); servaddr_in.sin_family = AF_INET; servaddr_in.sin_addr.s_addr = inet_addr("127.0.0.1"); servaddr_in.sin_port = htons(4000); sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd <= 0) { perror("socket"); return; } sendto(sockfd, buffer, 512, 0, (struct sockaddr *)&servaddr_in, sizeof(struct sockaddr_in)); close(sockfd); } /* server.c */ #include #include #include #include #include #include #include #include #include #ifdef SOLARIS #include #endif void main() { int sockfd; struct sockaddr_in myaddr_in, peeraddr_in; unsigned addrlen; char buffer[512]; struct timeval tim; int optval; fd_set fdsread, fdswrite, fdsexcept; memset(&myaddr_in, 0, sizeof(struct sockaddr_in)); memset(&peeraddr_in, 0, sizeof(struct sockaddr_in)); myaddr_in.sin_family = AF_INET; myaddr_in.sin_addr.s_addr = INADDR_ANY; myaddr_in.sin_port = htons(4000); sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd <= 0) { perror("socket"); return; } if (bind(sockfd, (struct sockaddr *)&myaddr_in, sizeof(struct sockaddr_in)) < 0) { perror("bind"); return; } FD_ZERO(&fdsread); FD_ZERO(&fdswrite); FD_ZERO(&fdsexcept); FD_SET(sockfd, &fdsread); tim.tv_sec=60; tim.tv_usec=0; select(sockfd+1, &fdsread, &fdswrite, &fdsexcept, &tim); if (FD_ISSET(sockfd, &fdsread)) { ioctl(sockfd, FIONREAD, &optval); printf("ioctl: %d\n",optval); optval=recvfrom(sockfd, buffer, 512, 0, (struct sockaddr *)&peeraddr_in, &addrlen); printf("recv: %d\n",optval); ioctl(sockfd, FIONREAD, &optval); printf("ioctl: %d\n",optval); } close(sockfd); } To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message