高洛峰2017-04-18 09:38:27
首先声明下你的问题我回答不了。你是搞网络的,应该知道一句简单的为什么返回 -1 可能不是个 good question.
其次,尝试回答下你的其它问题,顺便说下我个人的看法。
我是N年刚进一家做社交app的创业公司时,用过POSIX,支持 iOS3.1.3~iOS4 系统。我们经理要我把 iOS 和 Android的 IM 都改掉,掉线、重练、卡死、内存、线程很多问题... 为了跨平台,我就首选了 POSIX 开发,中间出了很多问题,资料又少,经常晚上加班跟服务端交流学习,那套服务端代码是经历过五六年千万级在线的考验沉淀下来的。不过后来还是没坚持下来,最终选择了 CFNetwork ,后来因为 iOS 的升级出过几次bug,再后来直到现在一直用的 GCDAsyncSocket。后来也开发过音视频协议、客户端自建server等,都没有用 POSIX。
说这些其实只是想说你先好好想想为什么要用POSIX,跨平台?自定义协议?如果都不是,强烈建议选择更高级的api或者使用成熟的第三方库。
iOS下的 POSIX 一直坑很多,需要有充足的经验,熟读苹果文档,而且要紧跟系统更新而更新,以及完善的测试。因为选择 POSIX 就意味着要自己处理 IP, 支持 IPv4/IPv6/IPv6-only, 自己处理Wifi/WWAN切换,IP reachability, VPN,线程安全,内存,各种网络异常,一些神奇的网络“假死”等等...iOS明年起强制https,你也要跟着更新。
把苹果官方的网络编程文档看一两遍是必须的。至于你要的socket库,很久前见过有几个移植项目,支持 iOS,现在可能都不维护了,名字我也忘干净了,你在开源代码托管网站和google groups上搜一下。我是最近测试个东西才玩了几天segmentfault,据我现在的观察,在这里找不到你现在及以后要碰到的问题的答案,stackoverflow都未必能找到。学习以及解决问题的途径就是看别人代码,苹果开源代码是一块宝地。
可能我说的严重了,也可能你要的功能没我想象的复杂,还是那句话,除非你必须跨平台或者必须实现自定义协议,而且有足够的时间去填坑,那就接着玩POSIX,否则选用高级api或第三方库。
友情提示:珍爱生命。