bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Strange select behavior


From: Giuseppe Scrivano
Subject: Re: Strange select behavior
Date: Mon, 01 Nov 2004 18:42:53 +0100
User-agent: Mozilla Thunderbird 0.8 (X11/20040926)

Bas Wijnen wrote:

Giuseppe Scrivano wrote:

  server_socket = socket (PF_INET, SOCK_STREAM, 0);

Check if the call succeeded (server_socket >= 0)

    /* address family.  */
  sock_in.sin_family = PF_INET;
    /* port used.  */
  sock_in.sin_port = htons (8080);
  sock_in.sin_addr.s_addr = INADDR_ANY;
err = bind (server_socket, (struct sockaddr *) &sock_in, sizeof (struct sockaddr_in));

Check if the call succeeded (err != -1)


  for(;;)
  {
    err = listen (server_socket, backlog);
    addrlen = sizeof (struct sockaddr);
    socklen_t ddrlen=0;
    int datatoread;
    do
    {
      datatoread = dataToRead(server_socket);
      sleep(1);

I don't understand why you need this with a nonzero timeout in select()...

      printf("datatoread: %i\n",datatoread);
    }
    while(!datatoread);
asock = accept (server_socket, (struct sockaddr *) &asock_in, &ddrlen);

    err = send (asock, &send_buff[0], strlen (send_buff), 0);
    if(err != strlen (send_buff))
      printf("Error sending to socket\n");

It is not an error for err to be < strlen (send_buff), as long as it is > 0. == 0 is in many cases not an error either, I think.

My guess is your problem comes from socket() or bind() failing. Check their return value, and errno.

Thanks,
Bas

Hi,
I checked for errors, the socket is created and binded correctly. I also forgot to say that increasing the timeout the select works well, but using a short timeout like in the example, it doesn't report any data.

Regards,
Giuseppe





reply via email to

[Prev in Thread] Current Thread [Next in Thread]