我已经尝试将fromddr声明为struct sockaddr_storage,struct sockaddr_in,struct sockaddr但没有任何成功.这段代码有问题吗?这是确定数据包来源的正确方法吗?
代码片段如下.
` /*Todo : update for TCP. use recv */ if((pkInfo->rcvLen=recvfrom(psInfo->sockFd,pkInfo->buffer,MAX_PKTSZ,/* (struct sockaddr*)&fromAddr,*/ NulL,&(addrLen) )) < 0) { perror("RecvFrom Failed\n"); } else { /*Apply Filter */ #if 0 struct sockaddr_in* tmpAddr; tmpAddr = (struct sockaddr_in* )&fromAddr; printf("Received Msg From %s\n",inet_ntoa(tmpAddr->sin_addr)); #endif printf("Packet Received of len = %d\n",pkInfo->rcvLen); }`解决方法 在调用recvfrom()之前,必须将addrLen初始化为sizeof fromAddr – 它是一个输入/输出参数.使用struct sockaddr_storage声明fromAddr是正确的. 总结
以上是内存溢出为你收集整理的linux – recvfrom在传递* from *时返回无效参数全部内容,希望文章能够帮你解决linux – recvfrom在传递* from *时返回无效参数所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)