Невозможно записать в CFWriteStreamWrite - PullRequest
1 голос
/ 09 декабря 2011

У меня проблемы с записью данных в CFStream.

// i am getting the CFSocketRef and then from it getting native Handle.
CFSocketNativeHandle sock = CFSocketGetNative( [appDelegate getSocketRef]);

Приведенный выше код возвращает мне тот же обработчик созданного сокета? Что будет записано в поток, который будет записан в созданном сокете?

// and then wrote 
CFStreamCreatePairWithSocket(kCFAllocatorDefault,  sock,
                                 &readStream, &writeStream);    
    if (!readStream || !writeStream) {
        // close([appDelegate TCPClient]);
        // close(sock);
        fprintf(stderr, "CFStreamCreatePairWithSocket() failed\n");
        return;
    }

выше работает нормально, это не дает мне сообщение об ошибке

// does not give error ,else portion is executed
if (!CFWriteStreamOpen(writeStream)) {
        CFStreamError myErr = CFWriteStreamGetError(writeStream);
        // An error has occurred.
        if (myErr.domain == kCFStreamErrorDomainPOSIX) {
            // Interpret myErr.error as a UNIX errno.
            NSLog(@"kCFStreamErrorDomainPOSIX");
        } else if (myErr.domain == kCFStreamErrorDomainMacOSStatus) {
            // Interpret myErr.error as a MacOS error code.
            OSStatus macError = (OSStatus)myErr.error;
            // Check other error domains.
            NSLog(@"kCFStreamErrorDomainMacOSStatus");
        }
    }else

    /* Send the connect call to stream */
  //  while (send_len < (originalLength + 1)) 
    {
      //  if (CFWriteStreamCanAcceptBytes(writeStream)) 
        {
            //UInt8 buf[] = "Hello, world";//(unsigned char *) "connectStream" 
            //CFIndex bufLen = (CFIndex)strlen(buf);
            bytes = CFWriteStreamWrite(writeStream,
                                       (unsigned char *) connectStream,
                                       originalLength );

            NSLog(@"%@",[[NSString alloc] initWithData:connectStream encoding:NSASCIIStringEncoding] );
            if (bytes < 0) {
                fprintf(stderr, "CFWriteStreamWrite() failed\n");
                // close(sock);
                return;
            }
            send_len += bytes;
        }
        // close(sock);
        CFReadStreamClose(readStream);
        CFWriteStreamClose(writeStream);
        return;
    }

CFWriteStreamCanAcceptBytes всегда возвращает false, поэтому я прокомментировал это и записал байты напрямую, он блокирует вызов и не возвращает ничего, ни один байт не записан в поток Может ли кто-нибудь, пожалуйста, направить меня в этом rergard? Есть ли другой способ сделать это?

С уважением, Аамир

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...