Tag: setsockopt

多播接收器套接字中的重复数据包

以下MulticastReceiver实现中似乎存在错误。 在为和创建两个实例时,我在每个流中获取两个包。 有什么指针吗? 我的猜测是REUSEADDR? class MulticastReceiverSocket { protected: const std::string listen_ip_; const int listen_port_; int socket_file_descriptor_; public: MulticastReceiverSocket ( const std::string & listen_ip, const int listen_port ) : listen_ip_ ( listen_ip ), listen_port_ ( listen_port ), socket_file_descriptor_ ( -1 ) { /* create socket to join multicast group on */ socket_file_descriptor_ = socket ( AF_INET, […]

调用setsockopt时出错“No such device”

我有一个代码,其中发送多播数据报。 一段重要的代码: uint32_t port; int sockfd, err_ip; const uint32_t sizebuff = 65535 – (20 + 8); unsigned char *buff = (unsigned char *) malloc(sizebuff); struct sockaddr_in servaddr, cliaddr; struct in_addr serv_in_addr; struct ip_mreq req; port = str2uint16(cmdsrv->ipport); bzero(buff, (size_t)sizebuff); bzero(&servaddr, sizeof(servaddr)); bzero(&serv_in_addr, sizeof(serv_in_addr)); err_ip = inet_aton(cmdsrv->ipaddr, &serv_in_addr); if(( err_ip != 0 ) && ( port […]

为什么改变SO_RCVBUF的值不起作用?

我正在创建一个程序来创建一个RAW套接字,以便读取所有流量。 在socket()和recvfrom()的调用之间(最后一个是循环以从缓冲区中取出所有数据包)我等待5s。 当我运行程序时,我用“快速模式”(快速填充缓冲区)的hping3命令向我的程序发送大约200个数据包。 只要5s过去,我的程序就会从缓冲区中提取大约150个数据包。 我尝试更改接收缓冲区的大小以获得更好的结果: int a = 65535; if ( (setsockopt(sockfd, 0, SO_RCVBUF, &a ,sizeof(int)) ) < 0 ) { fprintf(stderr, "Error setting sock opts..\n"); } 但是,无论是“a”,1还是10000000的值,它似乎都没有变化,我仍然可以从缓冲区获得~150个数据包。 有什么问题? 编辑:使用getsockopt调用validation«a»的值。