Beispiel #1
0
/*---------------------------------------------------
	called when the window received WSOCK_SELECT.
	receive SNTP data and set time.
---------------------------------------------------*/
void OnReceive(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
	struct sockaddr_in serversockaddr;
	struct NTP_Packet NTP_Recv;
	int sockaddr_Size;

	if(g_socket == -1) return;
	if(WSAGETSELECTERROR(lParam))
	{
		SocketClose(hwnd, "failed to receive");
		return;
	}
	if(g_socket != (int)wParam ||
		WSAGETSELECTEVENT(lParam) != FD_READ) return;

	// receive data
	sockaddr_Size = sizeof(serversockaddr);
	if(recvfrom(g_socket, (char *)&NTP_Recv, sizeof(NTP_Recv), 0,
		(struct sockaddr *)&serversockaddr, &sockaddr_Size) == SOCKET_ERROR)
	{
		SocketClose(hwnd, "recvfrom() failed");
		return;
	}

	// if Leap Indicator is 3
	/*
	if(ntohl(NTP_Recv.Control_Word) >> 30 == 3)
	{
		SocketClose(hwnd, "server is unhealthy");
		return;
	}
	*/

	// set system time
	SynchronizeSystemTime(ntohl(NTP_Recv.transmit_timestamp_seconds),
		ntohl(NTP_Recv.transmit_timestamp_fractions));

	// close socket
	SocketClose(hwnd, NULL);
}
Beispiel #2
0
/*---------------------------------------------------
  called when the window received WSOCK_SELECT.
  receive SNTP data and set time.
---------------------------------------------------*/
void OnReceive(HWND hwndSNTP, WPARAM wParam, LPARAM lParam)
{
	struct sockaddr_in serversockaddr;
	struct NTP_Packet NTP_Recv;
	int sockaddr_Size;
	
	if(m_socket == INVALID_SOCKET) return;
	if(WSAGETSELECTERROR(lParam))
	{
		SocketClose(hwndSNTP, "failed to receive");
		return;
	}
	if(m_socket != (SOCKET)wParam ||
		WSAGETSELECTEVENT(lParam) != FD_READ) return;
	
	// receive data
	m_dwTickCountOnRecv = timeGetTime();
	sockaddr_Size = sizeof(serversockaddr);
	if(recvfrom(m_socket, (char *)&NTP_Recv, sizeof(NTP_Recv), 0,
		(struct sockaddr *)&serversockaddr, &sockaddr_Size) == SOCKET_ERROR)
	{
		SocketClose(hwndSNTP, "recvfrom() failed");
		return;
	}
	
	// if Leap Indicator is 3
	if((NTP_Recv.Control_Byte >> 6) == 3)
	{
		SocketClose(hwndSNTP, "server is unhealthy");
		return;
	}
	
	// set system time
	SynchronizeSystemTime(hwndSNTP, &NTP_Recv);
	
	// close socket
	SocketClose(hwndSNTP, NULL);
}