上周,在调试cocos2d-x内置的telnet服务器CCConsole时发现,CCConsole在windows上运行时可以正常启动,但只要一连接telnet客户端就会crash,出错的位置在write()函数,是一个Assert错误,提示file handler 不能大于32;但是,在mac,ios,android(linux还没有测试)都是OK的。
在vs上单步跟了几遍,没看出什么问题,看来得另想办法,我知道winsock的api和unix socket有一些区别,所以考虑用winsock重写一个telnet服务器。先查一下msdn,看看Winsock的函数列表...等等,好像没有write()/read()函数....只有send()/recv(),看来问题很有可能出在这里...把所有的write/read改成send/recv,在windows下测试,可以正常启动telnet了,也可以发命令了,但退出的时候还是会崩溃,出错的位置是close(),原因和前面一样,winsock没有close()函数,要用closeSocket()来关闭socket连接。
问题搞定了,但要吐槽一下winsock,为什么不完全兼容unix socket的api呢?不但没有在编译的时候提示,运行时出错也完全没有可用的提示!!太坑了