这篇教程C++ FD_SET函数代码示例写得很实用,希望能帮到您。
本文整理汇总了C++中FD_SET函数的典型用法代码示例。如果您正苦于以下问题:C++ FD_SET函数的具体用法?C++ FD_SET怎么用?C++ FD_SET使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。 在下文中一共展示了FD_SET函数的29个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。 示例1: mainint main() { fd_set master; /* temp file descriptor list for select() */ fd_set read_fds; fd_set write_fds; struct sockaddr_in serv_addr, cli_addr; int sockfd, newsockfd, fdmax, i; /* int fdmax is the maximum file descriptor number */ socklen_t clilen; char buf[1024]; /* clear the master and temp sets */ FD_ZERO(&master); FD_ZERO(&read_fds); FD_ZERO(&write_fds); if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) perror("socket"); /* bind */ bzero((char *) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons(1234); if(bind(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) perror("bind"); listen(sockfd, 10); clilen = sizeof(cli_addr); /* add the sockfd to the master set */ FD_SET(sockfd, &master); /* keep track of the biggest file descriptor */ fdmax = sockfd; /* so far, it's this one*/ /*Main loop */ for( ; ; ) { /* copy it */ read_fds = master; write_fds = master; struct timeval tv; tv.tv_sec = 1; tv.tv_usec = 0; if(select(fdmax+1, &read_fds, &write_fds, NULL, NULL) < 0) perror("select"); /*run through the existing connections looking for data to be read*/ if(fdmax >= OPEN_MAX){ perror("open_max"); return 1; } for(i = 0; i <= fdmax; i++) { if(FD_ISSET(i, &read_fds)) { /* we got one... */ printf("Server %d: read/n", i); if(i == sockfd) { if((newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen)) < 0) perror("accept"); FD_SET(newsockfd, &master); /* add to master set */ printf("Server %d: accept new client %d/n", i, newsockfd); /* keep track of the maximum */ fd[newsockfd] = -1; if(newsockfd > fdmax) { fdmax = newsockfd; } } else { /* handle data from a client */ memset(buf, 0, sizeof buf); int size; if((size = recv(i, buf, 1024, 0)) <= 0) { continue; } else { /* we got some data from a client*/ printf("Server %d: path %s/n", i, buf); fd[i] = open(buf, O_RDONLY); printf("Server %d: file desc %d/n", i, fd[i]); if(fd[i] < 0){ memset(buf, 0, sizeof buf); memcpy(buf,"file not exist", 14); close(fd[i]); if(send(i, buf, 1024, 0) < 0) perror("send"); printf("Server %d: %s/n", i, buf); close(i);//.........这里部分代码省略.........
开发者ID:pbondarenko,项目名称:testrepository,代码行数:101,
示例2: mainint main(int argc, char *argv[]){ struct sockaddr_in broadcast_adrs; struct sockaddr_in from_adrs; socklen_t from_len; int sock, count = 0; int broadcast_sw = 1; fd_set mask, readfds; struct timeval timeout; int port = DEFAULT_PORT; char username[L_USERNAME] = "JohnDou"; char s_buf[S_BUFSIZE], r_buf[R_BUFSIZE]; int strsize = 0; packet r_packet; /* コマンドライン引数のチェックおよび使用法の表示 */ if(argc != 3) { fprintf(stderr, "Usage: %s User_name, Port_number/n", argv[0]); exit(EXIT_FAILURE); } sprintf(username, "%s", argv[1]); port = atoi(argv[2]); set_sockaddr_in_broadcast(&broadcast_adrs, (in_port_t)port); sock = init_udpclient(); if(setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (void *)&broadcast_sw, sizeof(broadcast_sw)) == 1) { exit_errmesg("setsockopt()"); } FD_ZERO(&mask); FD_SET(sock, &mask); // s_buf にHELLOパケットを格 C++ FD_TO_SOCKET函数代码示例 C++ FD_ISSET函数代码示例
|