0
我有一個C程序,它使用for(;;)
循環和select()
來從/向套接字執行recv /發送操作來監視文件描述符。我還需要這個程序每80毫秒發送一個數據包到一個數據包,我怎麼能實現這個? 也許我可以使用fork()
,並且子進程只需在每80毫秒由select()
監視的文件描述符之一中寫入ack。 有更好的解決方案嗎?是否可以使用select()方法在無限循環中使用nanosleep?
我有一個C程序,它使用for(;;)
循環和select()
來從/向套接字執行recv /發送操作來監視文件描述符。我還需要這個程序每80毫秒發送一個數據包到一個數據包,我怎麼能實現這個? 也許我可以使用fork()
,並且子進程只需在每80毫秒由select()
監視的文件描述符之一中寫入ack。 有更好的解決方案嗎?是否可以使用select()方法在無限循環中使用nanosleep?
當調用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毫秒併發送所需的數據包相當容易。
這很酷,你從哪裏知道這個存在? – Karl 2009-10-11 16:37:22
問題是select()返回幾個時間80毫秒,我不能重新利用timeval sturct與剩餘時間的可移植性原因(只有Linux做對了)... – Federico 2009-10-11 16:40:06
@karl:man select:P – Federico 2009-10-11 16:40:54