2011-12-28 20 views
1

ソケットを使用するiPhoneアプリケーションを作成していて、ソケット作成にCFSocketConnectToAddressを使用しています。ソケットのタイムアウトを秒単位で指定する必要があります。 wifi/3g/edge接続を使用している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

EDIT:

アプリケーションは、いくつかのソケット作品に別のホストで同じ時間を持つことになります。

おかげ

答えて

0

与えられる典型的な状況では、ソケットは、(ユーザの)時間のいつの間にか少量内に接続されます。時にはそうではない。アプリケーションの構造(具体的にはスレッディング)はこれを考慮する必要があります。

ソケットを接続するのを待っている間にメインスレッドをブロックしないでください。接続しようとしている不確定な進行状況インジケータを表示します。ユーザーにバックアップをとり、続行しないことを選択できます。

デザインアンサーではなく数値回答をお探しの場合は、しばしば60秒で投げます。

+0

OK、私はUIスレッドをブロックしないためにgcdブロックを使用しています。 30秒のタイムアウト値を使用することにしました。答えてくれてありがとう。 – kesrut

関連する問題