这篇教程C++ FD_CLR函数代码示例写得很实用,希望能帮到您。
本文整理汇总了C++中FD_CLR函数的典型用法代码示例。如果您正苦于以下问题:C++ FD_CLR函数的具体用法?C++ FD_CLR怎么用?C++ FD_CLR使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。 在下文中一共展示了FD_CLR函数的30个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。 示例1: mainint main(){ int server_sockfd, client_sockfd; int server_len, client_len; struct sockaddr_in server_address; struct sockaddr_in client_address; int result; fd_set readfds, testfds; server_sockfd = socket(AF_INET, SOCK_STREAM, 0); server_address.sin_family = AF_INET; server_address.sin_addr.s_addr = INADDR_ANY; server_address.sin_port = htons(9734); server_len = sizeof(server_address); bind(server_sockfd, (struct sockaddr *)&server_address, server_len); listen(server_sockfd, 5); FD_ZERO(&readfds); FD_SET(server_sockfd, &readfds); while (1) { char ch; int fd; int nread; testfds = readfds; printf("server waiting/n"); result = select(FD_SETSIZE, &testfds, (fd_set *)0, (fd_set *)0, (struct timeval *)0); if (result < 1) { perror("server5"); exit(1); } for (fd = 0; fd < FD_SETSIZE; fd++) { if (FD_ISSET(fd, &testfds)) { if (fd == server_sockfd) { client_len = sizeof(client_address); client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_address, &client_len); FD_SET(client_sockfd, &readfds); printf("add client on fd %d/n", client_sockfd); } else { ioctl(fd, FIONREAD, &nread); if (nread == 0) { close(fd); FD_CLR(fd, &readfds); printf("removing client on fd %d/n", fd); } else { read(fd, &ch, 1); sleep(5); printf("serving client on fd %d/n", fd); ch++; write(fd, &ch, 1); } } } } }}
开发者ID:chenjianlong,项目名称:books-code,代码行数:65,
示例2: FCPPT_ASSERT//.........这里部分代码省略......... out_pipe[writing_end]); close( err_pipe[writing_end]); fd_set master_fds; FD_ZERO( &master_fds); FD_SET( out_pipe[reading_end], &master_fds); FD_SET( err_pipe[reading_end], &master_fds); output out; int eof_count = 0; while (eof_count < 2) { fd_set read_fds = master_fds; int maxfd = std::max( out_pipe[reading_end], err_pipe[reading_end]), select_return = select( maxfd+1, &read_fds, 0, 0, 0); if (select_return == -1) throw fcppt::exception( FCPPT_TEXT("select failed")); int const fds[2] = { out_pipe[reading_end], err_pipe[reading_end] }; fcppt::string *outs[2] = { &out.out, &out.err }; for (int i = 0; i < 2; ++i) { if (!FD_ISSET(fds[i],&read_fds)) continue; ssize_t const buffer_size = static_cast<ssize_t>( 1024); char char_buffer[buffer_size]; ssize_t const b = ::read( fds[i], char_buffer, static_cast<std::size_t>( buffer_size-1)); if (b == static_cast<ssize_t>(0)) { // fcppt::io::cerr << "recieved eof on fd " << fds[i] << "/n"; eof_count++; FD_CLR( fds[i], &master_fds); continue; } if (b == static_cast<ssize_t>(-1)) throw fcppt::exception( FCPPT_TEXT("read failed")); // fcppt::io::cerr << "received the following crap: " << fcppt::string(char_buffer,char_buffer+b) << "/n"; outs[i]->insert( outs[i]->end(), char_buffer, char_buffer + b); } } waitpid( pid, (&out.exit_code), 0); return out;}
开发者ID:freundlich,项目名称:gitbot,代码行数:101,
示例3: relay_tcpvoid relay_tcp(SOCKS_STATE *state){ fd_set rfds, xfds; int nfds, sfd; struct timeval tv; struct timezone tz; ssize_t wc; rlyinfo ri; int done; u_long max_count = idle_timeout; u_long timeout_count; LOGINFO li; memset(&ri, 0, sizeof(ri)); memset(&li, 0, sizeof(li)); ri.ss = (struct sockaddr *)NULL; ri.len = 0; ri.nr = BUFSIZE; nfds = MAX(state->r, state->s); setsignal(SIGALRM, timeout); gettimeofday(&li.start, &tz); li.bc = li.upl = li.dnl = 0; ri.flags = 0; timeout_count = 0; for (;;) { FD_ZERO(&rfds); FD_SET(state->s, &rfds); FD_SET(state->r, &rfds); if (ri.flags == 0) { FD_ZERO(&xfds); FD_SET(state->s, &xfds); FD_SET(state->r, &xfds); } done = 0; /* idle timeout related setting. */ tv.tv_sec = 60; tv.tv_usec = 0; /* unit = 1 minute. */ tz.tz_minuteswest = 0; tz.tz_dsttime = 0; sfd = select(nfds+1, &rfds, 0, &xfds, &tv); if (sfd > 0) { if (FD_ISSET(state->r, &rfds)) { ri.from = state->r; ri.to = state->s; ri.flags = 0; if ((wc = forward(&ri)) <= 0) done++; else li.bc += wc; li.dnl += wc; FD_CLR(state->r, &rfds); } if (FD_ISSET(state->r, &xfds)) { ri.from = state->r; ri.to = state->s; ri.flags = MSG_OOB; if ((wc = forward(&ri)) <= 0) done++; else li.bc += wc; li.dnl += wc; FD_CLR(state->r, &xfds); } if (FD_ISSET(state->s, &rfds)) { ri.from = state->s; ri.to = state->r; ri.flags = 0; if ((wc = forward(&ri)) <= 0) done++; else li.bc += wc; li.upl += wc; FD_CLR(state->s, &rfds); } if (FD_ISSET(state->s, &xfds)) { ri.from = state->s; ri.to = state->r; ri.flags = MSG_OOB; if ((wc = forward(&ri)) <= 0) done++; else li.bc += wc; li.upl += wc; FD_CLR(state->s, &xfds); } if (done > 0) break; } else if (sfd < 0) { if (errno != EINTR) break; } else { /* sfd == 0 */ if (max_count != 0) { timeout_count++; if (timeout_count > max_count) break; } } } gettimeofday(&li.end, &tz); log_transfer(state->si, &li); close(state->r); close(state->s);}
开发者ID:CRDevOps,项目名称:srelay,代码行数:89,
示例4: main/** * new connecion comes, copy file descroptor of new connecton to child * process , parent process select * @return 0 */int main(int argc, char **argv){ int res; res = register_sig_handler(); if (res < 0) err_sys("register_sig_handler is err"); my_getopt(argc, argv); int pipefd[2]; int socket_fd; res = srv_socket_init(&socket_fd, 50, PORT); if (res < 0) err_sys("srv_socket_init err"); fd_set myset; FD_ZERO(&myset); FD_SET(socket_fd, &myset); int max = socket_fd; arraychild = (child_t *) malloc(sizeof(child_t) * childnum); memset(arraychild, 0, sizeof(child_t) * childnum); for (int i = 0 ; i < childnum; i++) { res = socketpair(AF_LOCAL, SOCK_STREAM, 0, pipefd); if (res < 0) err_sys("socketpair is err"); arraychild[i].child_pipefd = pipefd[0]; FD_SET(pipefd[0], &myset); if (pipefd[0] > max) max = pipefd[0]; int pid = fork(); if (pid < 0) err_sys("fork err"); if (pid == 0) { srv_socket_destory(&socket_fd); int connfd; int childpid = getpid(); while(1) { char c; res = read_fd(pipefd[1], &c, 1, &connfd); if (res < 0) err_sys("read_fd err"); fprintf(stdout, "pid is %d, accept success./n",childpid); child_process(connfd); write(pipefd[1], "", 1); srv_socket_close(&connfd); } //exit(0); } else { arraychild[i].child_pid = pid; } } struct sigaction myact; myact.sa_handler = sig_int_handler; if (sigaction(SIGINT, &myact, NULL) < 0) err_sys("sigaction err"); int navail = childnum; fd_set rset ; int newfd; int i = 0; while(1) { rset = myset; if (navail <=0 ) FD_CLR(socket_fd, &rset); select(max + 1, &rset, NULL, NULL, NULL); if (FD_ISSET(socket_fd, &rset)) { newfd = accept(socket_fd, NULL, NULL); for (i = 0; i < childnum; i++) { if (arraychild[i].child_status == 0) break; } res = write_fd(arraychild[i].child_pipefd, "", 1, newfd);//.........这里部分代码省略.........
开发者ID:fonglee,项目名称:just_for_fun,代码行数:101,
|