我正在编写使用套接字并使用CFSocketConnectToAddress
创建套接字的iPhone应用程序。我需要以秒为单位指定套接字超时。对于使用wifi / 3g /边缘连接的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
编辑:
对于不同的主机,应用程序将同时创建少量套接字。
由于
答案 0 :(得分:0)
在典型情况下,套接字将在不知不觉中很短的时间内(对于用户)进行连接。有时情况并非如此。应用程序的结构(特别是线程)应该考虑到这一点。
最重要的规则是在等待套接字连接时不应阻塞主线程。显示您尝试连接的不确定进度指示器。为用户提供备份和选择不继续的功能。
如果您正在寻找数字答案而不是设计答案,我经常会在60秒内完成。