gpt4 book ai didi

sockets - 带有 UDP 数据报的 SO_REUSEADDR - 资源不可用

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

我正在使用 SO_REUSEADDR 选项,但我不确定为什么会得到
资源临时不可用选项。

我正在 127.0.0.1 上测试客户端服务器代码

if ( (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0 )
{
perror("socket() error!!\n");
exit(1);
}

if ( setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse) ) < 0 ) {
perror("SO_REUSEADDR failed::");
exit(1);
}

while(1) {

nbytes_read = recvfrom(sockfd, (void *)&recvd_msg, sizeof(recvd_msg),
flags, &from, &from_len);
printf("nbytes_read = %d\n", nbytes_read);
if(nbytes_read == -1) {
perror("client: recvfrom() failed");
return FAILED;
}
if (nbytes_read > 0) {
if(recvd_msg.hdr.msgtype == DATA)
printf("recvd %d bytes from server\n", recvd_msg.hdr.payload_size);
ftp_show_payload(&recvd_msg);
}
if(recvd_msg.hdr.is_last == TRUE) {
break;
}
}

错误信息:
“客户端:recvfrom() 失败:资源暂时不可用”

错误号:11

在尝试运行客户端 3-4 次后,我得到了数据,我不确定发生了什么。

另外,这个问题出现在 Ubuntu Linux 上,但是当我在 Solaris 上运行相同的客户端服务器时,
它工作正常!

最佳答案

SO_REUSEADDR使用 bind() 时很有用,但在这里你没有使用绑定(bind)。

如果recvfrom(),我看不出任何问题返回 -1
使用bind()并替换您的电话recvfrom()recv() . recv()将在您在绑定(bind)调用中使用的端口接收所有数据包。

关于sockets - 带有 UDP 数据报的 SO_REUSEADDR - 资源不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4066549/

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