技术解析

请问有人看过《Unix 网络编程 卷 1:套接字联网 API》吗, MacOS 下如何编译通过里面的源码啊?
0
1975-02-26 00:44:36
idczone

书:
Mark-Down

在unpbook 官网下载了源码,在Mac OS上make了里面的源码,我做的步骤:
1)chmod u+x configure
./configure
2)cd lib
make
3)cd ../libfree
make (报错了)
4)cd ../libgai
make (报错了)

然后试着去gcc一个TCP echo回文Server程序,然后一堆报错

#include    "unp.h"

int
main(int argc, char **argv)
{
    int                 listenfd, connfd;
    pid_t               childpid;
    socklen_t           clilen;
    struct sockaddr_in  cliaddr, servaddr;
    void                sig_chld(int);

    listenfd = Socket(AF_INET, SOCK_STREAM, 0);

    bzero(&servaddr, sizeof(servaddr));
    servaddr.sin_family      = AF_INET;
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    servaddr.sin_port        = htons(SERV_PORT);

    Bind(listenfd, (SA *) &servaddr, sizeof(servaddr));

    Listen(listenfd, LISTENQ);

    Signal(SIGCHLD, sig_chld);

    for ( ; ; ) {
        clilen = sizeof(cliaddr);
        if ( (connfd = accept(listenfd, (SA *) &cliaddr, &clilen)) < 0) {
            if (errno == EINTR)
                continue;       /* back to for() */
            else
                err_sys("accept error");
        }

        if ( (childpid = Fork()) == 0) {    /* child process */
            Close(listenfd);    /* close listening socket */
            str_echo(connfd);   /* process the request */
            exit(0);
        }
        Close(connfd);          /* parent closes connected socket */
    }
}

}

"不希望为这些事情浪费太多时间" 那就不要浪费时间了

那就是看一遍过?

这本书我看的滚瓜烂熟
网络协议不好先看tcp编程接口部分。开头的协议和选项什么的先忽略。程序自己对照manpage写。反复阅读并写代码练习。,最终把tcp udp全看熟悉。完了nginx什么的网络模块。 最终归到协议上。

这本书有没有必要全部看完?

装个虚拟机呗

装虚拟机?Mac OS本身就是基于Unix了还需要装虚拟机吗?

好像是安装错了
mac 的gcc也有分不同版本. clang是mac自己的不是移植linux的
port install gcc48 试试

没必要 比如sctp 主要还是TCP和UDP相关的部分 熟悉接口和对应协议状态变化以及底层处理的方式

刚开始学我还是建议在Linux上写代码 编程经验不多的话 现在处理跨平台方面的差异还太早

@xguru

不知道你哪来的代码,在我的印象里面,socket,bind这些函数都是小写开头的


记得貌似是这本书源码里定义的宏

不希望为这些事情浪费太多时间
,
osx和unix区别
就像linux和安卓

早上刚下单
数据地带为您的网站提供全球顶级IDC资源