Пытаюсь получить ответ от NTP-сервера в следующем коде (иницализацию и проверку ошибок для краткости не привожу):
struct hostent *server = gethostbyname("ntp3.ntp-servers.net");
struct sockaddr_in serveraddr;
memset((char *)&serveraddr, 0, sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
serveraddr.sin_addr.S_un.S_un_b.s_b1 = server->h_addr[0];
serveraddr.sin_addr.S_un.S_un_b.s_b2 = server->h_addr[1];
serveraddr.sin_addr.S_un.S_un_b.s_b3 = server->h_addr[2];
serveraddr.sin_addr.S_un.S_un_b.s_b4 = server->h_addr[3];
serveraddr.sin_port = htons((u_short)123);
serverlen = sizeof(serveraddr);
n = sendto(sockfd, buf, strlen(buf), 0, (const sockaddr*)&serveraddr, serverlen);
n = recvfrom(sockfd, buf, strlen(buf), 0, (sockaddr*)&serveraddr, &serverlen);
Здесь — висим! (Если не поставить timeout, то висим вечно.)
Вопрос в том, должен ли что-нибудь ответить сервер или я что-то накосячил?
Спасибо.