gpt4 book ai didi

ios - 为什么CFStreamCreatePairWithSocketToHost成功后CFStreamCreatePairWithSocketToCFHost失败

转载 作者:行者123 更新时间:2023-11-29 13:19:18 27 4
gpt4 key购买 nike

在 iOS6.1 上,下面的代码应该做同样的事情,但是当我忘记写 addr.sin_len = sizeof(adde) 时,第一个 block 失败了。原来的错误是:

GOT EVENT FROM INPUT Event: 8
ERR: Error Domain=NSPOSIXErrorDomain Code=12 "The operation couldn’t be completed. Cannot allocate memory"

在添加缺失的行以设置结构大小后,第一个 block 与第二个 block 一样工作。其他开发人员可能会看到该错误消息并在这篇文章中绊倒。

代码:

    CFReadStreamRef readStream = NULL;
CFWriteStreamRef writeStream = NULL;

#if 1 // LONG WAY
struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_len = sizeof(addr); // ORIGINALLY WAS MISSING
addr.sin_family = AF_INET;
addr.sin_port = htons(5566);
int ret = inet_pton(AF_INET, "192.168.1.2", &(addr.sin_addr.s_addr)); // IPv4
assert(ret == 1);

NSLog(@"CONNECT");
CFDataRef address = CFDataCreate(kCFAllocatorDefault, (const UInt8 *)&addr, sizeof(addr));
assert(address);

CFHostRef macMini = CFHostCreateWithAddress(kCFAllocatorDefault, address);
CFRelease(address);
assert(macMini);

// (tried, makes not difference) CFHostScheduleWithRunLoop (macMini, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);

CFStreamCreatePairWithSocketToCFHost(kCFAllocatorDefault, macMini, 5566, &readStream, &writeStream);
CFRelease(macMini);
#else // SHORT WAY
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, CFSTR("192.168.1.2"), 5566, &readStream, &writeStream);
#endif

assert(readStream);
assert(writeStream);

iStream = CFBridgingRelease(readStream);
oStream = CFBridgingRelease(writeStream);

[iStream setDelegate:self];
[iStream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
[iStream open];
NSLog(@"ISTREAM %@ status=%d", iStream, [iStream streamStatus]);
NSLog(@"ERR: %@", [iStream streamError]);

[oStream setDelegate:self];
[oStream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
[oStream open];
NSLog(@"OSTREAM %@ status=%d", oStream, [oStream streamStatus]);
NSLog(@"ERR: %@", [oStream streamError]);

最佳答案

问题是 sin_len 没有设置。拥有以上两组代码的好处是,您可以看到如何以任何一种方式完成任务。

关于ios - 为什么CFStreamCreatePairWithSocketToHost成功后CFStreamCreatePairWithSocketToCFHost失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14792840/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com