windows平台,用C++写了一个控制台模式的网络服务程序,开启TCP监听,
等待客户端连接后推送数据,结构并不复杂,本地测试OK。
等发布到服务器上运行时,发生了诡异的现象,弹出控制台窗口后,程序就被阻塞了……
为了搞清楚阻塞在哪个位置,在一些可疑之处cout输出,结果一个都没有显示。
后来再发布调试版,连main的第一行cout都没输出,开始怀疑人生了……
于是将所有代码逻辑屏蔽,只留一个空壳和cout输出,没有任何问题,看来还是代码导致,
就这样,一点点放开代码,最后定位到inet_ntop这个函数,编码时的确在其和inet_ntoa之间犹豫了一下,
因为这个函数较新且能同时支持ipv4和ipv6,所以也没多想。
谁知这个小小的函数将花费我几个小时来追踪定位。
后来查阅资料得知,该函数需要windows2008以上服务器系统才能正常使用,
而部署的服务器正是一台老旧的2003系统,大概是程序启动时加载库函数发生了某种异常,
奇怪的是这中异常没有任何提示,而是弹开窗口后静静的,
什么也不做,什么也不说,也不崩溃,但你却崩溃了!!!
虽然现在仍在使用17年前的操作系统的人再没谁了,但是这件事情仍然能得到一些启示:
1 在使用新函数代替旧函数时注意查阅确认适用平台版本
2 在较早的操作系统发布程序,很多程序异常(特别是测试时没问题)跟系统版本有关