A.1.2 学习网络编程(www.cppentry.com)有用吗
以上说的是比较底层的网络编程(www.cppentry.com),程序代码直接面对从TCP 或UDP 收到的数据以及构造数据包发出去。在实际工作中,另一种常见的情况是通过各种client library来与服务端打交道,或者在现成的框架中填空来实现server,或者采用更上层的通信方式。比如用libmemcached 与memcached 打交道,使用libpq 来与PostgreSQL 打交道,编写Servlet 来响应HTTP 请求,使用某种RPC 与其他进程通信,等等。这些情况都会发生网络通信,但不一定算作"网络编程(www.cppentry.com)"。如果你的工作是前面列举的这些,学习TCP/IP 网络编程(www.cppentry.com)还有用吗?
我认为还是有必要学一学,至少在troubleshooting 的时候有用。无论如何,这些library 或framework 都会调用底层的Sockets API 来实现网络功能。当你的程序遇到一个线上问题时,如果你熟悉Sockets API,那么从strace 不难发现程序卡在哪里,尽管可能你没有直接调用这些Sockets API。另外,熟悉TCP/IP 协议、会用tcpdump 也非常有助于分析解决线上网络服务问题。