2009-10-11 61 views
0

我有一個C程序,它使用for(;;)循環和select()來從/向套接字執行recv /發送操作來監視文件描述符。我還需要這個程序每80毫秒發送一個數據包到一個數據包,我怎麼能實現這個? 也許我可以使用fork(),並且子進程只需在每80毫秒由select()監視的文件描述符之一中寫入ack。 有更好的解決方案嗎?是否可以使用select()方法在無限循環中使用nanosleep?

回答

3

當調用select()時,可以使用timeout參數來限制選擇等待時間。

struct timeval { 
      long tv_sec;   /* seconds */ 
      long tv_usec;  /* microseconds */ 
     }; 

int select(int nfds, fd_set *readfds, fd_set *writefds, 
       fd_set *exceptfds, struct timeval *timeout); 

將超時限制爲80毫秒併發送所需的數據包相當容易。

+0

這很酷,你從哪裏知道這個存在? – Karl 2009-10-11 16:37:22

+0

問題是select()返回幾個時間80毫秒,我不能重新利用timeval sturct與剩餘時間的可移植性原因(只有Linux做對了)... – Federico 2009-10-11 16:40:06

+1

@karl:man select:P – Federico 2009-10-11 16:40:54

相關問題