select() system call takes longer than the timeout specified


 
Thread Tools Search this Thread
Top Forums Programming select() system call takes longer than the timeout specified
# 8  
Old 03-31-2010
Quote:
Originally Posted by jim mcnamara
We need: OS version, kernel version, and what type of system you have - realtime, desktop, etc.
Linux 2.6.9-67.EL. It is VM on a desktop. There are no other processes running, it is not a shared system.

Quote:
Originally Posted by jim mcnamara
Have you traced your code and watched it wait in select() 120 seconds, for example?
I just do gettimeofday(&current_time, NULL); before and after.

Quote:
Originally Posted by jim mcnamara
Quote:
Originally Posted by jim mcnamara
Q:
int maxfd=some_fixed_value (?)

where is int maxfd initialized?
maxfd need not be initialized, its value is set by the call to curl_multi_fdset as an out-parameter. I printed the value thus set and it was 8.

Last edited by old_as_a_fossil; 03-31-2010 at 02:44 PM..
# 9  
Old 03-31-2010
You are not blocking the socket are you - that will break select?

for example see:
Linux-Kernel Archive: Re: UDP recvmsg blocks after select(), 2.6 bug?
# 10  
Old 04-06-2010
Sorry I was busy with other tasks for the past few days.
Quote:
Originally Posted by jim mcnamara
You are not blocking the socket are you - that will break select?

for example see:
Linux-Kernel Archive: Re: UDP recvmsg blocks after select(), 2.6 bug?
No, I'm not operating on sockets directly. I'm just using the libcurl library. Which is also a widely used library and I dont think they would do something silly like that.
# 11  
Old 04-06-2010
Quote:
Originally Posted by old_as_a_fossil
No, I'm not operating on sockets directly. I'm just using the libcurl library.
In what way?
# 12  
Old 04-06-2010
Code:
fcntl(sockfd, F_SETFL, O_NONBLOCK);

where sockfd is one of the fd's select is calling. You HAVE to do this or you break select(). Period.

I dunno what the libcurl folks did, but I think this is your problem - blocking.
# 13  
Old 04-07-2010
Quote:
where sockfd is one of the fd's select is calling. You HAVE to do this or you break select(). Period.

I dunno what the libcurl folks did, but I think this is your problem - blocking.
Just from looking at that single post and its title, I believe you misunderstood the discussion/conclusion in that thread.

When the kernel people speak of "breaking" select(), they mean altering the behavior of their select() implementation. The topic of that debate seems to be whether a select() hit on a blocking socket GUARANTEES that a subsequent recvmsg() call will not block. It doesn't guarantee that, but most programmers expect it to, hence the question of whether it is right for select() to "lie" about state.

However, select() is better thought of as a temporary snapshot of I/O state. If select() indicates readability on a file descriptor, that does not mean that a subsequent read operation is guaranteed not to block.

Likewise, if stat() indicates that a file is 1363 bytes big, that does not mean that a subsquent open() + read() will be able to retrieve 1363 bytes from it because the file may have been deleted or resized in the meantime.

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

As for the original problem:

As others have stated, I also believe that you should make sure you are really measuring the right thing. It is highly unlikely that select() doesn't behave "as advertised".

Make sure that your gettimeofday() calls only measure select(). Perhaps you didn't just measure select() but also time for reading and processing data?

When you used gettimeofday() to record time, did you also make sure to use those same data structures when printing the time difference? How did you print it - did you maybe mix up seconds and microseconds? Are you sure your print statements aren't adding any extra delay because you didn't flush or unbuffer your output file?

Please post your real code. What you posted originally does not contain the gettimeofday() calls you said you used to measure it.

jim mcnamara's suggestion to trace the process is also good - If possible, run your program through "strace ./prog" and see whether it really spends a long time in select().
# 14  
Old 04-07-2010
Quote:
Originally Posted by Driver
However, select() is better thought of as a temporary snapshot of I/O state. If select() indicates readability on a file descriptor, that does not mean that a subsequent read operation is guaranteed not to block.

Likewise, if stat() indicates that a file is 1363 bytes big, that does not mean that a subsquent open() + read() will be able to retrieve 1363 bytes from it because the file may have been deleted or resized in the meantime.
What does this mean for a socket however, which cannot be deleted or resized? According to the linux man page, it happens when received data is discarded due to checksum errors etc.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Timeout to abolish ssh connection command it takes too long

Hi, I am running a ssh connection test in a script, how can I add a timeout to abolish the process if it takes too long? ssh -i ~/.ssh/ssl_key useraccount@computer1 Thank you. - j (1 Reply)
Discussion started by: hce
1 Replies

2. UNIX for Advanced & Expert Users

Issues with select system call

1. We are using client-server model communication using TCP/IP protocol 2. The TCP socket created with O_NON_BLOCK flag 3. When we make attempt to send large data to other process, the send is partially successful. It means we attempt to send 90K data, OS sent only 40K data successfully. ... (3 Replies)
Discussion started by: MasthanDudekula
3 Replies

3. Homework & Coursework Questions

program to send messages to parent using pipes and select system call

Write a program using select, which will create some number of child processes that continuously send text messages to the parent process using pipes. Each child has its own pipe that it uses to communicate with the parent. The parent uses select () to decide what pipes should be processed to... (1 Reply)
Discussion started by: ripssingh
1 Replies

4. Shell Programming and Scripting

system call

Trying to figure out a load issue with a webserver. I have traced a php script and noticed the following connect(4, {sa_family=AF_INET, sin_port=htons(3306), sin_addr=inet_addr("XX.XX.XX.XX")}, 16) = -1 EINPROGRESS (Operation now in progress) <0.000035> poll(, 1, 2000) = 1 () <0.000120>... (5 Replies)
Discussion started by: rajan007
5 Replies

5. Shell Programming and Scripting

script to monitor the process system when a process from user takes longer than 15 min run.

get email notification from from system when a process from XXXX user takes longer than 15 min run.Let me know the time estimation for the same. hi ,any one please tell me , how to write a script to get email notification from system when a process from as mentioned above a xxxx user takes... (1 Reply)
Discussion started by: kirankrishna3
1 Replies

6. Programming

Having some trouble with select() call in C

I have this while loop: while (notdone) { //Set the timers waitd.tv_sec = 5; waitd.tv_usec = 0; FD_ZERO(&tempreadfds); FD_ZERO(&tempwritefds); FD_ZERO(&readfds); /* initialize the read fd set */ FD_ZERO(&writefds); /* initialize the write fd set */ ... (1 Reply)
Discussion started by: Legend986
1 Replies

7. UNIX and Linux Applications

Syb15 Query takes longer, help me out

When i run the below query in syb15 (with syb 12.5.X backward compatibilty) environment it runs 45min where as the same in syb12.5.1 it takes only 7-10min. But the main thing is stld_date(in the below query) does not covered in the index of that table. Also main_table is a huge table. So is it... (1 Reply)
Discussion started by: prsam
1 Replies

8. UNIX for Advanced & Expert Users

how to use exceptfds argument in select system call

Hi, Can any one tell me how to use the fourth argument of select system call.I saw example "port forwarding" on the net,but it was too complex for me to understand.Can any one explain me about the usage of exceptfds argument of select system call with simple example. Thanks. (2 Replies)
Discussion started by: bvijaya
2 Replies

9. UNIX for Advanced & Expert Users

Login Process takes longer

Hello. Since Yesterday, I notice that after giving telnet IP or SSH IP - it takes long time to display login: , I mean earlier after entering Server name It used to immediately ask for login ID and then password. But, now it takes min of 2-3 minute to ask for password. Where can I check,... (12 Replies)
Discussion started by: panchpan
12 Replies

10. UNIX for Advanced & Expert Users

how to differentiate system call from library call

Hi, Ho do I differentiate system call from library call? for example if I am using chmod , how do I find out if it is a system call or library call? Thanks Muru (2 Replies)
Discussion started by: muru
2 Replies
Login or Register to Ask a Question