23,217
社区成员




int func()
{
pid_t pid;
fd_set r_set;
int ret;
if ((pid = fork()) < 0)
err_sys("fork error");
else if (pid == 0) {
//do something
restart(); //这是一个自己写的重启计算机的函数
}
int sockfd = 0;
if ((sockfd = socket(AF_INET, SOCK_PACKET, htons(ETH_P_ALL))) == -1)
err_sys("create socket error");
int flags = fcntl(sockfd, F_GETFL, 0);
fcntl(sockfd, F_SETFL, flags | O_NONBLOCK);
while(1)
{
FD_ZERO(&r_set);
FD_SET(sockfd, &r_set);
ret = select(sockfd + 1, &r_set, NULL, NULL, NULL);
if (ret == -1) {
perror("select");
exit(errno);
}else if (ret == 0) {
printmsg("timeout.");
continue;
}
if (FD_ISSET(sockfd, &r_set)) { /* 接收数据 */
if (recvfrom(sockfd, /* 参数就不详细写了 */) <= 0) {
printmsg ("recv from error ... ");
continue;
}
//do something
//restart();
}
}
}