コード例 #1
0
int
main(int argc, char **argv)
{
	int				sockfd;
	ssize_t			n;
	char			buff[MAXLINE];
	time_t			ticks;
	socklen_t		len;
	struct sockaddr_storage	cliaddr;

	if (argc == 2)
		sockfd = Udp_server(NULL, argv[1], NULL);
	else if (argc == 3)
		sockfd = Udp_server(argv[1], argv[2], NULL);
	else
		err_quit("usage: daytimeudpsrv [ <host> ] <service or port>");

	for ( ; ; ) {
		len = sizeof(cliaddr);
		n = Recvfrom(sockfd, buff, MAXLINE, 0, (SA *)&cliaddr, &len);
		printf("datagram from %s\n", Sock_ntop((SA *)&cliaddr, len));

		ticks = time(NULL);
		snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks));
		Sendto(sockfd, buff, strlen(buff), 0, (SA *)&cliaddr, len);
	}
}
コード例 #2
0
ファイル: daytimeudpsrv1.c プロジェクト: rkks/refer
int
main(int argc, char **argv)
{
	int					tfd, flags;
	char				buff[MAXLINE];
	time_t				ticks;
	struct t_unitdata	*tud;

	if (argc == 2)
		tfd = Udp_server(NULL, argv[1], NULL);
	else if (argc == 3)
		tfd = Udp_server(argv[1], argv[2], NULL);
	else
		err_quit("usage: daytimeudpsrv [ <host> ] <service or port>");

	tud = T_alloc(tfd, T_UNITDATA, T_ADDR);

	for ( ; ; ) {
		tud->udata.maxlen = MAXLINE;
		tud->udata.buf = buff;
		T_rcvudata(tfd, tud, &flags);
		printf("datagram from %s\n", Xti_ntop(&tud->addr));

        ticks = time(NULL);
        snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks));
		tud->udata.len = strlen(buff);
        T_sndudata(tfd, tud);
	}
}
コード例 #3
0
int
main(int argc, char **argv)
{
	int			sockfd;
	ssize_t			n;
	char			buff[MAXLINE];
	time_t			ticks;
	socklen_t		len;
	struct sockaddr_storage	cliaddr;

	if ( argc == 2)
		sockfd = Udp_server( NULL, argv[1], NULL);
	else if ( argc == 3)
		sockfd = Udp_server( argv[1], argv[2], NULL);
	else
		err_quit( "usage: daytimeudpsrv [ <host> ] <service or port>");

	for ( ; ; ) {
            
		len = sizeof(cliaddr);
                /* since socket is unconnected we use Recvfrom and Sendto,
                 * not Read, Write */
		n = Recvfrom(sockfd, buff, MAXLINE, 0, (SA *)&cliaddr, &len);
		printf( "datagram from %s\n", Sock_ntop((SA *)&cliaddr, len));

                /* response */
                time_t rawTime;
                time( &rawTime);
                struct tm * timeInfo;
                timeInfo = localtime( &rawTime);
                strftime( buff, MAXLINE, "cf16 daytime service on port 13. "
                        "The time on this server now is: %A, %B %d, %G %T %p-%Z\n",
                        timeInfo);
    
		//ticks = time(NULL);
		//snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks));
		Sendto( sockfd, buff, strlen(buff), 0, (SA *)&cliaddr, len);
               /* At this moment we don't know if peer is reachable or not
                * If it is not reachable sendto return Success but Recvfrom
                * will block forever (it doesn't see an ICMP "destination
                * unreachable" packet coming back from peer because socket
                * is unconnected)
                */
	}
}
コード例 #4
0
int 
main(int argc, char **argv) 
{ 
	int sockfd; 
	ssize_t n; 
	char buff[MAXLINE]; 
	time_t ticks; 
	socklen_t len; 
	struct sockaddr_storage cliaddr; 
	struct addrinfo hints, *res;
	int on = 1;
	
	if (argc == 2) 
		sockfd = Udp_server(NULL, argv[1], NULL); 
	else if (argc == 3) {
		bzero(&hints, sizeof(struct addrinfo));
		hints.ai_flags = AI_PASSIVE;
		hints.ai_family = AF_UNSPEC;
		hints.ai_socktype = SOCK_DGRAM;

		if ( ( n = getaddrinfo(argv[1], argv[2], &hints, &res)) != 0)
			err_quit("udp_server error for %s, %s: %s",
				 argv[1], argv[2], gai_strerror(n));
	
		do {
			sockfd = socket(res->ai_family, res->ai_socktype,
					res->ai_protocol);
			if (sockfd < 0)
				continue; /* error - try next one */
			Setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR,
				   &on, sizeof(on));
			if (bind(sockfd, res->ai_addr, res->ai_addrlen) == 0)
				break; /* success */
			Close(sockfd);
		} while ( (res = res->ai_next) != NULL);

		if (res == NULL)
			err_sys("udp_server error");
	} else 
		err_quit("usage: daytimeudpsrv [ <host> ] <service or port>"); 
 
	for ( ; ; ) { 
		len = sizeof(cliaddr); 
		n = Recvfrom(sockfd, buff, MAXLINE, 0, (SA *)&cliaddr, &len); 
		printf("datagram from %s\n", Sock_ntop((SA *)&cliaddr, len)); 
 
		ticks = time(NULL); 
		snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks)); 
		Sendto(sockfd, buff, strlen(buff), 0, (SA *)&cliaddr, len); 
	} 
}