
		if (from.sin_addr.s_addr == u.sin_addr.s_addr){
			int ret =sendto(sock, msg, msglen, 0, (struct sockaddr*)&d, sizeof(d));
			if (ret!=msglen)
				perror("\nSend: ");
		}
		else{
			int ret =sendto(sock, msg, msglen, 0, (struct sockaddr*)&u, sizeof(u));
			if (ret!=msglen)
				perror("\nSend: ");
		}
	}




		const int max_replylen = 10000;
		char reply[max_replylen];
		struct sockaddr_in upfrom;
		socklen_t upfrom_len= sizeof(upfrom);
		int replylen = recvfrom(sock, reply, max_replylen, 0
					,(struct sockaddr *)&upfrom, &upfrom_len);
		if (replylen < 0)
			perror("\nRecv Reply: ");
		else{
//			assert(upfrom.sin_addr.s_addr == d.sin_addr.s_addr);
			reply[replylen] = '\0';
			fprintf(stderr, "\nRecv Reply: from: %s:%d", 
				//  reply, 
				inet_ntoa(upfrom.sin_addr), ntohs(upfrom.sin_port));
		}
		
		ret =sendto(sock, msg, msglen, 0, (struct sockaddr*)&from, sizeof(from));
		if (ret!=msglen)
			perror("\nSend Reply: ");
	}
}
