[О блоге] [наверх] [пред] [2020-05-29 14:20:21+03:00] [82b7a30ffba69976ade01bcd162059f3a727d58f]
Темы: [hate]

Unix не предназначался для сетевой работы, в отличии от Plan9

Тут что-то поднялась у меня при общении тема Plan9 и в одной PDF-ке
нашёл пример как на C под POSIX подключиться по TCP:

    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <netdb.h>
    ...
        struct sockaddr_in sock_in;
        struct servent *sp;
        struct hostent *host;
        ...
        memset(&sock_in, 0, sizeof (sock_in));
        sock_in.sin_family = AF_INET;
        f = socket(AF_INET, SOCK_STREAM, 0);
        if (f < 0) error("socket");
        if (bind(f, (struct sockaddr*)&sock_in, sizeof sock_in) < 0) error("bind");
        host = gethostbyname(argv[1]);
        if(host){
            sock_in.sin_family = host−>h_addrtype;
            memmove(&sock_in.sin_addr, host−>h_addr, host−>h_length);
        } else {
            sock_in.sin_family = AF_INET;
            sock_in.sin_addr.s_addr = inet_addr(argv[1]);
            if (sock_in.sin_addr.s_addr == −1) error("unknown host %s", argv[1]);
        }
        sp = getservbyname("discard", "tcp");
        if (sp) { sock_in.sin_port = sp−>s_port; }
        else { sock_in.sin_port = htons(9); };
        if (connect(f, (struct sockaddr*)&sock_in, sizeof sock_in) < 0) error("connect:");
    ...

тогда как в Plan9 это выполняется:

    #include <u.h>
    #include <libc.h>
    ...
        fd = dial(netmkaddr(argv[1], "tcp", "discard"), 0, 0, 0);
        if(fd < 0) sysfatal("can’t dial %s: %r", argv[1]);

    [оставить комментарий]