Skip to content

Instantly share code, notes, and snippets.

@Hakkadaikon
Created April 7, 2026 18:23
Show Gist options
  • Select an option

  • Save Hakkadaikon/2802ce3bc331869ffdfe9e21799e62f3 to your computer and use it in GitHub Desktop.

Select an option

Save Hakkadaikon/2802ce3bc331869ffdfe9e21799e62f3 to your computer and use it in GitHub Desktop.
詳解TCP/IP vol.2 実装 - RFC867 Datetimeサーバー 動作確認 サンプル
// 詳解TCP/IP vol.2 実装
// RFC867 - Datetimeサーバー 動作確認 サンプル
//
// 動作確認環境
// Ubuntu 24.04
//
// 注意
// xinetdを自分で立てている前提。
// xinetd 立て方
// $ sudo apt install xinetd
// $ sudo sed -i.org '/disable/s/yes/no/' /etc/xinetd.d/daytime-udp
// $ diff -u /etc/xinetd.d/daytime-udp{.org,}
// $ sudo systemctl restart xinetd
// 参考
// https://zenn.dev/tetsu_koba/articles/2fc0507d7ee50d
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>
static const size_t BUFF_SIZE = 150;
static const char* DATETIME_SERVER = "127.0.0.1";
int main(void)
{
char buff[BUFF_SIZE];
int sockfd;
printf("socket...\n");
if ((sockfd = socket(PF_INET, SOCK_DGRAM, 0)) <= 0) {
fprintf(stderr, "socket error");
return 1;
}
struct sockaddr_in serv;
bzero((char*)&serv, sizeof(serv));
serv.sin_family = AF_INET;
serv.sin_addr.s_addr = inet_addr(DATETIME_SERVER);
serv.sin_port = htons(13);
printf("sendto...\n");
int send_buffsize =
sendto(
sockfd,
buff,
BUFF_SIZE,
0,
(struct sockaddr*)&serv,
sizeof(serv));
if (send_buffsize != BUFF_SIZE) {
fprintf(stderr, "sendto error");
return 1;
}
printf("recvfrom...\n");
int receive_bytes =
recvfrom(
sockfd,
buff,
BUFF_SIZE,
0,
(struct sockaddr*)NULL,
(socklen_t*)NULL);
if (receive_bytes < 2) {
fprintf(stderr, "recvfrom error");
return 1;
}
printf("receive data:\n\t%s\n", buff);
printf("done.\n");
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment