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

iPhone应用程序的套接字超时值,iphone,objective-c,ios,Iphone,Objective C,Ios,我正在编写一个iPhone应用程序,它使用套接字并使用CFSocketConnectToAddress创建套接字。我需要以秒为单位指定套接字超时。使用wifi/3g/edge连接的iPhone/iPod的最佳超时值(以秒为单位)是多少 示例代码: #define SOCKET_TIMEOUT_VALUE ? CFSocketRef sock_id = CFSocketCreate(kCFAllocatorDefault, PF_INET, SOCK_STREAM, IPPROTO_TCP, k

我正在编写一个iPhone应用程序,它使用套接字并使用
CFSocketConnectToAddress
创建套接字。我需要以秒为单位指定套接字超时。使用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; 
}

编辑:

应用程序将为不同的主机同时创建几个套接字


感谢

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

最重要的规则是,在等待套接字连接时,不应阻塞主线程。显示您正在尝试连接的不确定进度指示器。让用户能够备份并选择不继续


如果您要寻找的是数字答案而不是设计答案,我通常会在60秒内抛出。

好的,我使用gcd块来阻止UI线程。我选择使用30秒超时值。谢谢你的回答。