我目前正在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] 举报,一经查实,本站将立刻删除。