gpt4 book ai didi

cocoa - 在 Mac OSX Lion 10.7.2 中绑定(bind)/监听端口失败

转载 作者:行者123 更新时间:2023-12-03 17:06:02 25 4
gpt4 key购买 nike

我正在尝试在 MacOSX 10.7.2 (Lion) 下设置 SilverLight 策略服务器。这要求我创建一个套接字并将其绑定(bind)到端口 943,因为 SilverLight 请求此端口上的策略文件。不幸的是,我似乎无法在该端口绑定(bind),因为绑定(bind)调用失败并显示 errno=49。我想我无权访问该端口。也许我需要 root 权限?或者我是否需要将此端口转发到我可以绑定(bind)的另一个端口?我对网络编程有点陌生,所以非常感谢任何帮助!我还附上了我的源代码。也许我做错了什么,尽管如果我使用 SilverLight 受限端口 4502-4532(一旦成功提供策略文件,SilverLight 将在该端口上进行通信),它就可以正常工作。

- (void) start {
CFSocketRef socket = CFSocketCreate(kCFAllocatorDefault, PF_INET, SOCK_STREAM, IPPROTO_TCP, 0, NULL, NULL);
if (!socket) {
[self errorWithName:@"Unable to create socket."];
return;
}

int reuse = true;
CFSocketNativeHandle fileDescriptor = CFSocketGetNative(socket);
if (setsockopt(fileDescriptor, SOL_SOCKET, SO_REUSEADDR,
(void *)&reuse, sizeof(int)) != 0) {
NSLog(@"Unable to set socket options.");
return;
}

struct sockaddr_in address;
memset(&address, 0, sizeof(address));
address.sin_len = sizeof(address);
address.sin_family = AF_INET;
address.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
address.sin_port = htons(943);
CFDataRef addressData = CFDataCreate(NULL, (const UInt8 *)&address, sizeof(address));
[(id)addressData autorelease];

CFSocketError error = CFSocketSetAddress(socket, addressData);
if (error < 0) {
NSLog(@"Error bind %d\n", errno); //fails here for port 943.
return;
}

NSFileHandle *listeningHandle = [[NSFileHandle alloc]
initWithFileDescriptor:fileDescriptor
closeOnDealloc:YES];

[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(receiveIncomingConnectionNotification:)
name:NSFileHandleConnectionAcceptedNotification
object:nil];

[listeningHandle acceptConnectionInBackgroundAndNotify];
}

最佳答案

只有 root 拥有 1024 以下端口的权限。尝试使用 sudo 运行您的代码,看看是否可以解决您的问题。

编辑:

此外,请查看man strerror。它将采用相对无意义的错误代码并为您提供一个(稍微)更有用的字符串。

#include <stdio.h>
#include <string.h>

int main (int argc, char const *argv[])
{
printf("%s\n", strerror(49) );
return 0;
}

给予:

Can't assign requested address

关于cocoa - 在 Mac OSX Lion 10.7.2 中绑定(bind)/监听端口失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8198550/

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