1、自帶超時參數的函數
select自帶超時
定義超時時間變量
struct timeval tv = {5, 0};
while(1) {
????????tv.tv_sec = 5;
????????tv.tv_usec = 0;
????????int res = select(1, &readfds, NULL, NULL, &tv);
? ? ? ? .....
}
poll自帶超時
1、poll函數的第三個參數,是以毫秒為單位的超時時間
2、當時間到達后,會接觸阻塞,進而做相關事情
3、是一個整型變量,值傳遞
int res = poll(&pfd, 1, 5000);
2、setsockopt ---? ?SO_RCVTIMEO
//設置接收超時時間
struct timeval tv = {5, 0};
if(setsockopt(sfd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv))==-1) {
????????perror("setsockopt error");
????????return -1;
}
3、alarm? ----??SIGALRM
#include <unistd.h>
unsigned int alarm(unsigned int seconds);
功能:設置一個定時器,在時間到達后,會發射一個SIGALRM的信號
參數:以秒為單位的時間, 如果參數設置成0,表示取消該定時器
返回值:如果該定時器之前沒有定時器,則返回0,如果該定時器之前有定時器,會返回上一個定時器剩余的秒數,并更新上一個定時器為該定時器
關鍵詞:alarm(5);? ? ?SIGALRM
void handle(int signo) {if (signo == SIGALRM) {printf("alarm\n");alarm(3);return;} } int main(int argc, char const *argv[]) {if (signal(SIGALRM, handle) == SIG_ERR) {printf("signal error\n");return -1;}alarm(3);while (1) {}return 0; }