iphone - iPhone 应用程序的套接字超时值

标签 iphone objective-c ios

我正在编写使用套接字并使用 CFSocketConnectToAddress 创建套接字的 iPhone 应用程序。我需要以秒为单位指定套接字超时。对于使用 wifi/3g/edge 连接的 iPhone/iPod,以秒为单位的最佳超时值是多少?

示例代码:

#define SOCKET_TIMEOUT_VALUE ?
CFSocketRef sock_id = CFSocketCreate(kCFAllocatorDefault, PF_INET,  SOCK_STREAM, IPPROTO_TCP, kCFSocketNoCallBack, NULL, NULL) ; 
struct sockaddr_in addr4;
memset(&addr4, 0, sizeof(addr4));
addr4.sin_len = sizeof(addr4);
addr4.sin_family = PF_INET;
addr4.sin_port = htons([[hostValue port_number] intValue]);
inet_pton(AF_INET, inet_ntoa(*(struct in_addr *)host_name->h_addr_list[0]), &addr4.sin_addr);
CFDataRef addr = CFDataCreate(kCFAllocatorDefault, (void*)&addr4, sizeof(struct sockaddr_in));
int retVal = CFSocketConnectToAddress(sock_id, addr, SOCKET_TIMEOUT_VALUE);
if (retVal != 0)
{
    // Failed to Connect!
    errorNumber = FAILED_CONNECT ; 
    CFRelease(addr) ;
    CFRelease(sock_id) ;
    goto shutdown2; 
}

Apple documentation for CFSocketConnectToAddress

编辑:

应用程序在同一时间为不同的主机创建的套接字很少。

谢谢

最佳答案

在典型情况下,套接字将在极短的时间内(对于用户而言)连接。有时情况并非如此。您的应用程序的结构(特别是线程)应该考虑到这一点。

最重要的规则是在等待套接字连接时不应该阻塞主线程。显示您尝试连接的不确定进度指示器。为用户提供后退和选择不继续的能力。

如果你要找数字答案而不是设计答案,我经常在六十秒内抛出。

关于iphone - iPhone 应用程序的套接字超时值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8660964/

相关文章:

ios - 2 张适用于 iPhone 6 和 iPhone 5 的 @2x 大小的图像

ios - 如何在段 Controller 中仅为选定的段索引设置颜色

iphone - 移动 Safari SVG 问题

iphone - 同一数据的不同 View 之间转换的概念

iphone - 在 Corona SDK 中,如果应用程序暂停,如何隐藏组?

ios - 在 iOS x64 中获取可变参数函数的参数

ios - 开始触摸的计数不等于完成触摸的计数

ios - 由于单元重复使用而导致按钮重叠

ios - 更改 NavigationBar 人字形和标题颜色无效

objective-c - UIView 中的圆柱形外观渐变