• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Select Receive Calls Irregularity?
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Select Receive Calls Irregularity?


  • Subject: Select Receive Calls Irregularity?
  • From: "Nelson Lee" <email@hidden>
  • Date: Thu, 20 Sep 2007 18:10:34 -0700

I have an application that reads data from a socket.  The data is perpetually written to the socket so I am fairly certain that it is the receive call that's causing the delays.

From timing debugging output, the recvfrom call returns after ~1ms.  However, occasionally, there is a call that takes 10 ms.  Is this a bug in select?

Code as follows:

   
    fd_set set;
    FD_ZERO(&set);
    FD_SET(m_socket, &set);

    struct timeval time;
    time.tv_sec = 0;
    // time.tv_usec = timeout;
    time.tv_usec = timeout;
    int s = m_socket + 1;
    if (select(s, &set, 0, 0, &time) <= 0)  {
        return 0;
    }
    if (!FD_ISSET(m_socket, &set)) {
        return 0;
    }

    struct sockaddr_in serverAddress;
    size_t serverAddressLen = sizeof(serverAddress);
    struct sockaddr_in *serverAddressPtr;
    size_t *serverAddressLenPtr;

    if (inOutServerAddress) {
        serverAddressPtr = inOutServerAddress;
        serverAddressLenPtr = inOutServerAddressLen;
    }
    else {
        serverAddressPtr = &serverAddress;
        serverAddressLenPtr = &serverAddressLen;
    }

    size_t receivedLen = recvfrom(m_socket,            // our socket
            data,                                    // Receiving buffer
            dataLen,                                // Max receiving buffer size
            0,                                        // Flags: no options
            (struct sockaddr *)serverAddressPtr,    // Address of the sender (correct endian)
            (socklen_t*) serverAddressLenPtr);        // Address length
    if (receivedLen == -1) {
        static int s_oneOnly = 0;
        if (s_oneOnly != errno) {
            ERROR_MESSAGE(strerror(errno));
            s_oneOnly = errno;
        }
        return(0);
    }
    return receivedLen;

Thanks,
-n
 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Macnetworkprog mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

  • Follow-Ups:
    • Re: Select Receive Calls Irregularity?
      • From: Quinn <email@hidden>
  • Prev by Date: Re: WS Core and SSL
  • Next by Date: Re: Select Receive Calls Irregularity?
  • Previous by thread: Re: WS Core and SSL
  • Next by thread: Re: Select Receive Calls Irregularity?
  • Index(es):
    • Date
    • Thread