微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当* from *被传递时,recvfrom返回无效参数

我目前正在linux上编写一个小型的UDP服务器程序。 UDP服务器将接收来自两个不同对等点的数据包,并根据从哪个对等点接收数据包来执行不同的操作。 我正在试图确定从哪里接收数据包的来源。 但是,当select返回并调用recvfrom ,将返回无效参数错误。 如果我作为第二个最后的parameter passingNULL,recvfrom成功。

我曾尝试从地址struct sockaddr_storage , struct sockaddr_in , struct sockaddr声明fromadr没有任何成功。 他们的代码有问题吗? 这是确定数据包来源的正确方法吗?

代码片段如下。

` /*Todo : update for TCP. use recv */ if((pkInfo->rcvLen=recvfrom(psInfo->sockFd,pkInfo->buffer,MAX_PKTSZ,/* (struct sockaddr*)&fromAddr,*/ NULL,&(addrLen) )) < 0) { perror("RecvFrom Failedn"); } else { /*Apply Filter */ #if 0 struct sockaddr_in* tmpAddr; tmpAddr = (struct sockaddr_in* )&fromAddr; printf("Received Msg From %sn",inet_ntoa(tmpAddr->sin_addr)); #endif printf("Packet Received of len = %dn",pkInfo->rcvLen); } `

识别套接字客户端的远程断开连接

如何在没有pipe理员权限的情况下初始化Windows套接字库

Linux x86_64汇编套接字编程

有没有办法获得unix套接字连接的另一端的uid

丢弃传入的UDP数据包而不读取

在Linux上,当使用C执行与端口0(select一个随机端口)的套接字绑定时,我得到了errno 98,地址已经在使用。 这怎么可能?

套接字和multithreading

绑定到127.0.0.2

为什么发送数据报不起作用,如果我不先创build一个TCP连接?

一次可以打开多less个TCP套接字?

调用recvfrom()之前,必须将addrLen初始化为addrLen的sizeof fromAddr – 它是一个输入/输出参数。 使用struct sockaddr_storage来声明fromAddr是正确的。

我有同样的问题:

Invalid arguments 'Candidates are: int recvfrom(int,void *,unsigned int,int,sockaddr *,unsigned int *) '

在相同的代码中:

recvfrom(sockFd,buffer,(struct sockaddr*)&fromAddr,&addrLen)

我的错误是我使用普通的int类型而不是unsigned int addrLen :

unsigned int addrLen; addrLen = sizeof(fromAddr);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐