2009-05-21 10 views
4

無効なソケットにCFSocketSendDataを介してデータを送信することを避けるにはどうすればよいですか? ソケットの状態をCFSockerIsValidで調べようとしましたが、この方法は はもう一方の側が閉じている場合でもtrueを返します。無効なCFSocketを特定する方法

ソケットが有効かどうかはどのように判断できますか?エラーを避けるためです。

答えて

3

反対側がソケットを閉じると、コールバック(CFSocketCreateで指定した)がコールバックタイプkCFSocketDataCallBackで呼び出されますが、データは空になります。

void SocketCallback (CFSocketRef s, CFSocketCallBackType callbackType, 
       CFDataRef address, const void *data, void *info) 
{ 
    if (callbackType == kCFSocketDataCallBack) { 
     NSData *nsData = (NSData *)data; 
     if (nsData.length == 0) { 
      NSLog(@"got kCFSocketDataCallBack, but with 0 bytes -- connection terminated"); 
      // do whatever you want to do here when connection is dropped 
     } 
    } else { 
     NSLog(@"SocketCallback type %d", callbackType); 
    } 

} 

あなたがそこにフラグを設定して、接続が切断されていることを知るためにそれを使用し、あなたがドロップされた接続への書き込みに行くときに、ユーザーを再接続するかを通知するために試みることができるか。このようなことのためのテストあなたがしたいことは何でも。

関連する問題