如何解决为什么TCP socket.connect调用仅在4g网络中的ios13上失败?
我们只需要简单的套接字打开/连接/ GET即可下载ios应用程序的文件。 在几乎所有情况下,这都可以正常工作。除了在4G网络上运行ios13的设备上。
以下组合都可以:
- ios12,无线网络
- ios12,3g
- ios12,4克
- ios13,无线网络
- ios13,3克
但是当为ios13、4g执行socket.connect()时,它只是失败了。 (简化的)代码是:
function Header({ backButton }) {
const histroy = useHistory();
return (
<div className="header">
...
</div>
);
}
对于任何正确的网络,我都可以正确通过connect调用,并且日志类似于:
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <arpa/inet.h>
#include <netinet/tcp.h>
static void setsockaddr4( sockaddr_in *sa,String host,int port ){
memset( sa,sizeof(*sa) );
sa->sin_family=AF_INET;
sa->sin_port=htons( port );
if( host.Length() && host.Length()<1024 ){
// Copy to char*
char buf[1024];
for( int i=0;i<host.Length();++i ) buf[i]=host[i];
buf[host.Length()]=0;
NSLog(@" BBSocket::setsockaddr4: hostBuff[%s]",buf);
if( hostent *host=gethostbyname( buf ) )
{
if( char *hostip=inet_ntoa(*(in_addr *)*host->h_addr_list) ){
sa->sin_addr.s_addr=inet_addr( hostip );
NSLog(@" BBSocket::setsockaddr4: sin_addr [%s]",hostip);
}
}
}
}
// ..
int _sock;
_sock=socket( AF_INET,SOCK_STREAM,IPPROTO_TCP );
sockaddr_in sa;
setsockaddr4( &sa,host,port );
printsockaddr4(&sa);
bool ret = connect( _sock,(sockaddr*)&sa,sizeof(sa) )>=0;
if(ret == false)
{
NSLog(@" BBSocket::Connect4. Error: %i",errno);
}
else
{
NSLog(@" BBSocket::Connect4. Success");
}
然而,仅针对上述4g选项的套接字连接失败,并出现错误51:
BBSocket::Open. proto: 1
BBSocket::Open. Socket open OK
BBSocket::setsockaddr4
BBSocket::setsockaddr4: hostBuff[s3.dualstack.eu-west-2.amazonaws.com]
BBSocket::setsockaddr4: sin_addr [52.95.148.124]
BBSocket::printsockaddr4: START -=================-
==- sin_family [2] :: AF_INET[2] AF_INET6[30]
==- sin_port [80] :: netwOrder[20480]
==- sin_addr [52.95.148.124] :: netwOrder[2090098484]
BBSocket::Connect4. Success
所有IP地址都是正确的,只是连接失败并显示为
BBSocket::Open. proto: 1
BBSocket::Open. Socket open END OK
BBSocket::setsockaddr4
BBSocket::setsockaddr4: hostBuff[s3.dualstack.eu-west-2.amazonaws.com]
BBSocket::setsockaddr4: sin_addr [52.95.149.16]
BBSocket::printsockaddr4: START -=================-
==- sin_family [2] :: AF_INET[2] AF_INET6[30]
==- sin_port [80] :: netwOrder[20480]
==- sin_addr [52.95.149.16] :: netwOrder[278224692]
BBSocket::Connect4. Error: 51
对于可能导致这种情况的任何见解, 谢谢Jaime
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。