Created
April 7, 2026 18:23
-
-
Save Hakkadaikon/2802ce3bc331869ffdfe9e21799e62f3 to your computer and use it in GitHub Desktop.
詳解TCP/IP vol.2 実装 - RFC867 Datetimeサーバー 動作確認 サンプル
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // 詳解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