banner
Tenifs

Tenifs

雄关漫道真如铁,而今迈步从头越。
github
follow
zhihu
email

Ubuntu 22.04 の daytime サービスを開始する

1、xinetd のインストール

sudo apt-get install xinetd

2、設定ファイルの変更

cd /etc/xinetd.d
sudo vim daytime

image

3、xinetd の再読み込み

sudo invoke-rc.d xinetd reload

4、テスト

#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <assert.h>
#include <stdio.h>
#include <unistd.h>
#include <netdb.h>
#include <errno.h>
#include <string.h>


#define BUFFER_SIZE 1024


int main(int argc, char* argv[]) {
    assert(argc == 2);
    char* hostname = argv[1];
    
    // ホスト名からホスト情報を取得
    struct hostent* hostinfo = gethostbyname(hostname);
    assert(hostinfo);

    // サービス名からホスト情報を取得
    struct servent* servinfo = getservbyname("daytime", "tcp");
    assert(servinfo);
    printf("the daytime port is %d\n", ntohs(servinfo->s_port));

    // アドレス情報を設定
    struct sockaddr_in address;
    address.sin_family = AF_INET;
    address.sin_port = servinfo->s_port;
    address.sin_addr = *(struct in_addr*)* hostinfo->h_addr_list;

    int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    int result = connect(sockfd, (struct sockaddr*)&address, sizeof(address));
    if (result == -1) {
        printf("error: %d, msg: %s\n", errno, strerror(errno));
        return 1;
    }

    char buffer[BUFFER_SIZE];
    result = read(sockfd, buffer, sizeof(buffer));
    assert(result > 0);
    buffer[result] = '\0';

    printf("the day time is: %s\n", buffer);
    close(sockfd);

    return 0;
}

image

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。