2011-12-28 23 views
1

我正在编写使用套接字并使用CFSocketConnectToAddress创建套接字的iPhone应用程序。我需要在几秒钟内指定套接字超时。对于使用wifi/3G /边缘连接的iPhone/iPod,最佳超时值是多少秒?iPhone应用程序的套接字超时值

示例代码:

#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

编辑:

应用将有几个插座创作了不同主机上同时进行。

由于

回答

0

鉴于典型情况下,一个将插座的时间不知不觉少量(为用户)内进行连接。有时情况并非如此。应用程序的结构(特别是线程)应该解决这个问题。

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

如果您正在寻找一个数字答案而不是设计答案,我经常在六十秒内折腾。

+0

好的,我使用gcd块不阻止UI线程。我选择使用30秒超时值。谢谢你的回答。 – kesrut 2012-01-01 08:56:21