gpt4 book ai didi

c++ - 对 recvfrom 检索到的 sockaddr* 进行 sendto-call 时的“错误地址”

转载 作者:行者123 更新时间:2023-11-28 03:36:04 25 4
gpt4 key购买 nike

    struct sockaddr_in  addrSenderOfVideo
struct sockaddr_in client_addr; // Client Internet address
char* buffer = new char[2];
int sizeOfBuffer=1050;
int clientfd;
char* bufferWithPacketData = new char[sizeOfBuffer];
extern int client_s; // Client socket

if (client_s < 0)
{
printf("*** ERROR - socket() failed \n");
}

//Client address.
client_addr.sin_family = AF_INET;
client_addr.sin_addr.s_addr = htonl(INADDR_ANY); // IP address to use
client_addr.sin_port = htons(portNumClient);

clientfd = bind(client_s,(const sockaddr*) &client_addr, sizeof(client_addr));
fprintf (stderr, "inside of listen for new packet<; clientfd is %d",clientfd);

if (clientfd < 0)
{
fprintf (stderr, "WARNING -1 doing BIND!");

}


int n = recvfrom (client_s, bufferWithPacketData, sizeOfBuffer, 0,(struct sockaddr*)&addrSenderOfVideo, &fromlen);

retcode = sendto(client_s, buffer, symbol_size, 0,
(struct sockaddr *)&addrSenderOfVideo, sizeof(addrSenderOfVideo) );

调用 sendto 时,打印出错误“9errno is Bad address”。这是什么原因,我该如何解决?

数据是在函数 recvfrom 中从发送方接收的,addrSenderOfVideo 包含一个端口和一个 ip-number。发件人的 ip 为“127.0.0.1”,这也是包含在 addrSenderOfVideo 中的 ip。

最佳答案

sendto 有两个参数,它们是指向用户空间缓冲区的指针,因此可以触发 EFAULT:数据缓冲区和地址。地址指向一个固定大小的局部变量,所以它似乎不是罪魁祸首。所以它一定是数据缓冲区。数据缓冲区指向一个大小为 2 的数组。您没有向我们展示如何初始化 symbol_sizesymbol_size 是否有可能大于 2?

关于c++ - 对 recvfrom 检索到的 sockaddr* 进行 sendto-call 时的“错误地址”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10819160/

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