Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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);
    }
}
Exemplo n.º 3
0
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);
    }
}
Exemplo n.º 4
0
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);

}