3
我用選擇同步I/O多路複用。它將檢查任何數據1秒.1秒後,如果沒有數據,它會顯示一個輸出(puts("Waited for 1 sec no data");
)然後它會再次檢查數據。但這是工作只有在第一時間,它纔會進入無限循環。 有沒有其他解決方案。如何在C中超時後調用select?
//..............................
//.............................
//Creating listener socket and other sort of things
struct timeval tv;
tv.tv_sec=1;
tv.tv_usec=0;
while(1)
{
FD_ZERO(master);
FD_SET(listener,master);
fdmax = listener;
int retval=select(fdmax+1,master, NULL, NULL,&tv);
printf("retval is %d\n",retval);
if(retval == -1)
{
perror("Server-select() error");
}else if(retval)
{
puts("Data available");
//If there is no data do some work and checkagain.
}else
{
puts("Waited for 1 sec no data");
//If there is no data do some work and checkagain.
}
}
了'timeval'結構宣告超時。如果你想在I/O之間等待一秒鐘,你應該按照@Pierre的建議。 – Leonard
select()在超時後關閉套接字嗎? –
非常徹底地閱讀'select'的手冊頁。它有很多提示:*考慮在select()返回後未定義超時。* – tofro