A.1.4 可移植性重要吗
写网络程序要不要考虑移植性?要不要跨平台?这取决于项目需要,如果贵公司做的程序要卖给其他公司,而对方可能使用Windows、Linux、FreeBSD、Solaris、AIX、HP-UX 等等操作系统,这时候当然要考虑移植性。如果编写公司内部的服务器上用的网络程序,那么大可只关注一个平台,比如Linux。因为编写和维护可移植的网络程序的代价相当高,平台间的差异可能远比想象中大,即便是POSIX 系统之间也有不小的差异(比如Linux 没有SO_NOSIGPIPE 选项,Linux 的pipe(2) 是单向的,而FreeBSD 是双向的),错误的返回码也大不一样。
我就不打算把mudu往Windows 或其他操作系统移植。如果需要编写可移植的网络程序,我宁愿用libevent、libuv、Java Netty 这样现成的库,把"脏活、累活"留给别人。