int srv_recv_request(snfs_msg_req_t* req, struct sockaddr_un* cliaddr, socklen_t* clilen) { int status = my_recvfrom(req, cliaddr, clilen); if (status == 0) { printf("[snfs_srv] request error.\n"); return 0; } if (status < 0) { printf("[snfs_srv] recvfrom error: %s.\n", strerror(errno)); exit(-1); } return status; }
void dg_cli(FILE *fp, int sockfd, const SA *pservaddr, socklen_t servlen) { int n = 0; char sendline[MAXLINE]; char recvline[MAXLINE + 1]; //!!! while (my_fgets(sendline, MAXLINE, fp) != NULL) { my_sendto(sockfd, sendline, strlen(sendline), 0, pservaddr, servlen); n = my_recvfrom(sockfd, recvline, MAXLINE, 0, NULL, NULL); recvline[n] = 0; my_fputs(recvline, stdout); } }
void tu8_9dg_cli(FILE *fp, int sockfd, const SA *pservaddr, socklen_t servlen) { int n = 0; char sendline[MAXLINE]; char recvline[MAXLINE]; socklen_t len ; struct sockaddr *preply_addr; //用于返回的地址, sockaddr!!! preply_addr = my_malloc(servlen); while (my_fgets(sendline, MAXLINE, fp) != NULL) { my_sendto(sockfd, sendline, strlen(sendline), 0, pservaddr, servlen); // printf("sendto %s : %s\n", // my_sock_ntop(preply_addr, len), sendline); len = servlen ; n = my_recvfrom(sockfd, recvline, MAXLINE, 0, preply_addr, &len); // printf("recvfrom %s : %s\n", // my_sock_ntop(preply_addr, len), recvline); if (len != servlen || memcmp(pservaddr, preply_addr, len) != 0) { printf("reply from %s (ignored)\n", my_sock_ntop(preply_addr, len)); continue; } recvline[n] = 0; my_fputs(recvline, stdout); } }
void dg_cli(FILE *fp, int sockfd, const SA *pservaddr, socklen_t servlen) { int n = 0; int maxfdp1 = 0; const int on = 1; char sendline[MAXLINE] = {0}; char recvline[MAXLINE] = {0}; fd_set rset; socklen_t len; struct sockaddr *preply_addr = NULL; preply_addr = my_malloc(servlen); my_setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on)); my_pipe(pipefd); // printf("pipefd[0] = %d\n", pipefd[0]); //+ maxfdp1 = max(sockfd, pipefd[0]) + 1; FD_ZERO(&rset); my_signal(SIGALRM, recvfrom_alarm); while (my_fgets(sendline, MAXLINE, fp) != NULL ) { my_sendto(sockfd, sendline, strlen(sendline), 0, pservaddr, servlen); alarm(3); while (1) { FD_SET(sockfd, &rset); FD_SET(pipefd[0], &rset); if ( (n = select(maxfdp1, &rset, NULL, NULL, NULL)) < 0 ) { if (errno == EINTR) { DEBUG; printf("select errno = EINTR\n"); //+ continue; } else { err_sys("select error"); } } // printf("kankan!\n"); if ( FD_ISSET(sockfd, &rset) ) { len = servlen; n = my_recvfrom(sockfd, recvline, MAXLINE, 0, preply_addr, &len); recvline[n] = 0; printf("from %s: %s", my_sock_ntop(preply_addr, len), recvline); } if ( FD_ISSET(pipefd[0], &rset) ) { // printf("read 上面\n"); my_read(pipefd[0], &n, 1); //timer expired // printf("read 下面!\n"); break; } } } free(preply_addr); }