ソケットを使用する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:
アプリケーションは、いくつかのソケット作品に別のホストで同じ時間を持つことになります。
おかげ
OK、私はUIスレッドをブロックしないためにgcdブロックを使用しています。 30秒のタイムアウト値を使用することにしました。答えてくれてありがとう。 – kesrut