Operation on non-blocking socket would block
在mono平台上socket没有问题,切换到苹果平台,转化为IL2CPP平台,socket在接收数据的回调中报错:
Operation on non-blocking socket would block
在官方社区的回答:
https://answers.unity.com/questions/1441990/systemnetsocketssocketexception-operation-on-non-b.html
Socket的ReceiveTimeout属性在mono上是正常的 但是在IL2CPP上是有问题
在使用异步模式—IL2CPP上删除Socket的ReceiveTimeout属性的设置就行
.NET中的Socket类提供了网络通信常用的方法,分别提供了同步和异步两个版本,其中异步的实现是基于APM异步模式实现,即BeginXXX/EndXXX的方式。异步方法由于其非阻塞的特性,在需考虑程序性能和伸缩性的情况下,一般会选择使用异步方法。
但使用过Socket提供的异步方法的同学,应该都会注意到了Socket的异步方法是无法设置Timeout的。以Receive操作为例,Socket提供了一个ReceiveTimeout属性,但该属性设置的是同步版本的Socket.Receive()方法的Timeout值,该设置对异步的Socket.BeginReceive()无效:如果对方没有返回任何消息,则BeginReceive操作将无法完成,其中提供的回调函数也将不会调用