linux 网络编程程序员

iOS TUN之避免UDP包ip分片

2017-06-09  本文已影响218人  勤奋happyfire

iOS的NetworkExtension给应用暴露了一个虚拟网卡TUN设备,可以设置其MTU值。如果上层应用发送的IP包大于这个MTU就会被分片。(详见:http://www.jianshu.com/p/741cb12ab0c9

Error Domain=NSPOSIXErrorDomain Code=40 "Message too long" UserInfo={NSLocalizedFailureReason=Error in send() function., NSLocalizedDescription=Message too long

这是因为使用sendto时,send buf有限制,经测试,在iOS上这个值为9216,加上28的ip和udp头,可以发送的ip包最大为9244。sned buf可以通过getsockopt获取:

    int sndbuf=0;
    socklen_t optlen = sizeof(sndbuf);
    getsockopt(remote_ctx->fd,SOL_SOCKET, SO_SNDBUF, &sndbuf, &optlen );

可以通过setsockopt设置为较大的值。

上一篇 下一篇

猜你喜欢

热点阅读