基になるを必要とするクラスメソッドがあり、CFSocket
このメソッドは頻繁に呼び出されるため、メソッドを実行するたびに新しいソケットを作成して破棄するにはコストがかかりすぎます。その代わりにstatic
、CFSocketRefのインスタンスを作成して、メソッド呼び出し間で単一のソケットを共有できるようにしました。
+(void)myStaticMethod {
static CFSocketRef udpSocket;
@synchronized(self) {
if (!udpSocket) {
udpSocket = CFSocketCreate(kCFAllocatorDefault, PF_INET, SOCK_DGRAM, IPPROTO_UDP, 0, NULL, NULL);
int yes = 1;
setsockopt(CFSocketGetNative(udpSocket), SOL_SOCKET, SO_NOSIGPIPE, (void *)&yes, sizeof(yes));
}
}
//method body
}
2つの質問があります:
- アプリが終了するときにソケットを破棄(無効化)することを心配する必要がありますか、それともそれ自体が閉じますか?
- ソケットがそれ自体を閉じる原因となる可能性のあるイベントはどれですか。また、不正な書き込みを防ぐにはどうすればよい
CFSocketRef
ですか。