Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 28 Feb 1998 20:50:28 +0300 (MSK)
From:      Adel Abushaev <adel@ksu.ru>
To:        freebsd-bugs@FreeBSD.ORG
Subject:   Possible ioctl() implementation mistake
Message-ID:  <199802281750.UAA07054@alpha.ksu.ru>

next in thread | raw e-mail | index | archive | help

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 <adel@ksu.ru>, <adel@core.dumped.org>

---------------------------------------------------------------------------

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 <stdio.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

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 <stdio.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/stat.h>
#include <sys/fcntl.h>
#include <sys/ioctl.h>

#ifdef SOLARIS
#include <sys/filio.h>
#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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199802281750.UAA07054>