gpt4 book ai didi

ios - 从 iOS 扩展中绑定(bind) Unix 域套接字失败,错误号为 48(地址已在使用中)

转载 作者:可可西里 更新时间:2023-11-01 03:56:44 26 4
gpt4 key购买 nike

我有一些逻辑可以通过创建 Unix 域套接字来工作,并且在普通应用程序中运行时没有任何问题。但是,当我为应用程序扩展运行它时,我从 bind() 得到一个 -1 和 errno = 48(“地址已在使用中”)。

NSArray *applicationSupportDirectoryPaths = 
NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,
NSUserDomainMask, YES);

int fd = socket(AF_UNIX, SOCK_STREAM, 0); // returns a non-zero value

NSString *loc = [applicationSupportDirectoryPaths[0] stringByAppendingPathComponent:@"usd"];
struct sockaddr_un addr;
memset(&addr, 0, sizeof(addr));
addr.sun_family = AF_UNIX ;
strncpy(addr.sun_path, [loc UTF8String], sizeof(addr.sun_path)-1);
int bindres = bind(fd, (struct sockaddr*)&addr, sizeof(addr)); // returns -1, error is 48

库目录返回的位置是:

/var/mobile/Containers/Data/PluginKitPlugin/A8110BA2-5AE7-42C1-84DA-2A9B303C7277/Library/

我认为失败的原因是因为与应用程序的库目录相比,这是一些特殊的位置。

如果有人知道为什么会发生这种情况或有任何解决方法,我将不胜感激。

更新:我尝试使用缓存目录 (NSCachesDirectory),但现在我得到错误号 3(没有这样的过程)。

最佳答案

首先猜测地址确实在使用中。

iOS 可能会按需实例化/终止扩展,因此在执行下一次调用时可能不会释放上一次调用中绑定(bind)的套接字。

关于ios - 从 iOS 扩展中绑定(bind) Unix 域套接字失败,错误号为 48(地址已在使用中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35091485/

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