2009-05-21 54 views
4

如何避免通過CFSocketSendData將數據發送到無效的套接字? 我試圖確定與CFSockerIsValid的套接字狀態,但此方法 返回仍然如此,當另一邊關閉。如何確定無效的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); 
    } 

} 

您可以在那裏設置一個標誌,並用它來知道你的連接斷開,然後當你去寫被丟棄的連接,嘗試重新連接或通知用戶或無論你想做什麼。