Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 3500016
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 18, 20262026-05-18T12:40:55+00:00 2026-05-18T12:40:55+00:00

I have this code, the point is that I want to receive no more

  • 0

I have this code, the point is that I want to receive no more than 600Kbits/s using a UDP socket, I implemented an algorithm using duration during which we receive and the sleep command….

#if defined (WIN32)
#include <winsock2.h>

typedef int socklen_t;
#elif defined (linux)
#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <unistd.h>

#define INVALID_SOCKET -1
#define SOCKET_ERROR -1
#define closesocket(s) close(s)
typedef int SOCKET;
typedef struct sockaddr_in SOCKADDR_IN;
typedef struct sockaddr SOCKADDR;
#endif

#include <stdio.h>

#include <stdlib.h>

#include <time.h>


 #define RCVBUFSIZE 4
#define PORT 4444
 #define ECHOMAX 255

int main(void)
 {
#if defined (WIN32)
    WSADATA WSAData;
    int erreur = WSAStartup(MAKEWORD(2,2), &WSAData);
#else
    int erreur = 0;
#endif

int recvMsgSize;
char echoBuffer[RCVBUFSIZE];
//unsigned int echoStringLen;
//int bytesRcvd, totalBytesRcvd; //bytes received in a single recv()

SOCKET sock;
SOCKADDR_IN sin;
SOCKADDR_IN SenderAddr;
int SenderAddrSize = sizeof(SenderAddr);


if(!erreur)
{

    sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    sin.sin_addr.s_addr = inet_addr("127.0.0.1");
    sin.sin_family = AF_INET;
    sin.sin_port = htons(4444);
   memset(&sin.sin_zero, '\0', sizeof(sin.sin_zero));

     bind(sock, (SOCKADDR*)&sin, sizeof(sin));

//totalBytesRcvd = 0;

printf("Received: ");

int speed_limit= 614400; //600Kbits/s
int one_second=1000;
int elapsed; //elapsed time
int transmit=0; // how much i receive during 'elapsed'
int expected_receive; //what I'm excpected to receive
int transmit_delta; //diference
int time_sleep; //how much to sleep
clock_t start_time= clock();

 for(;;)
{


    if((recvMsgSize=recvfrom(sock, echoBuffer,1024, 0, (SOCKADDR *)&SenderAddr, &SenderAddrSize)) > 0)
    {
            transmit+=recvMsgSize;
            clock_t tempo= clock();

            elapsed=(tempo-start_time)/CLOCKS_PER_SEC;
        // Check moment speed every five second, you can choose any value
            if(elapsed>5)
            {
                start_time= tempo;
                expected_receive=speed_limit*elapsed/8;
                transmit_delta=expected_receive-transmit;

                if(transmit_delta>0)
                {
                    time_sleep=8*transmit_delta*one_second/speed_limit;
                    Sleep(time_sleep);
                }
                transmit=0;
            }
            echoBuffer[recvMsgSize]='\0';
            printf(echoBuffer);


    }

}
    printf("\n");
    getchar() ;

closesocket(sock);

    #if defined (WIN32)
        WSACleanup();
    #endif
}

return EXIT_SUCCESS;
}

the problem is that it receive the message but it blocks the receiving process from time to time…which I guess will cause loss of data especially when I’m using UDP…

any alternative solution is welcolme…

thanks in advance..

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-18T12:40:56+00:00Added an answer on May 18, 2026 at 12:40 pm

    If you use non-blocking sockets with select() you can just ignore the data until you’re ready to read it. Not reading data will cause the TCP connection to “slow down”. However, this way you do not have exact control about the amount of data received. It’s just an approximation. All techniques I know of that limit bandwidth in a more accurate way are implemented on the sender side.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have this code in jQuery, that I want to reimplement with the prototype
I have this code that performs an ajax call and loads the results into
I have this code #include <iostream> using namespace std; int main(int argc,char **argv) {
I have this code: myVariable which I want to change into trace(myVariable: + myVariable);
I have this code :- using (System.Security.Cryptography.SHA256 sha2 = new System.Security.Cryptography.SHA256Managed()) { .. }
I have this code and I want to keep it elegant. I got stuck
I have an activity that extends MapActivity, and inside onCreate() I have this code
I have this code: chars = #some list try: indx = chars.index(chars) except ValueError:
I have this code: CCalcArchive::CCalcArchive() : m_calcMap() { } m_calcMap is defined as this:
I have this code while($row = mysql_fetch_row($result)) { echo '<tr>'; $pk = $row[0]['ARTICLE_NO']; foreach($row

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.