在我们运行 RTEMS 4.9.2 的系统上,我们遇到了一个非常奇怪的套接字通信问题。我们正在设置套接字并使用以下命令进行绑定(bind):
// Bind the socket to set the local port
sockaddr_in localSocketAddress = {0};
localSocketAddress.sin_family = AF_INET;
localSocketAddress.sin_port = (u_short)localPort;
localSocketAddress.sin_addr.s_addr = localAddress;
if (bind( mSocket, (sockaddr *)&localSocketAddress, sizeof(sockaddr_in)) == SOCKET_ERROR)
{
int errorOut = errno;
...
这适用于 UDP 通信,但在下面解释的奇怪的特定情况下除外。我们遇到的问题是此 bind 调用失败,即使设置正确。我们收到错误 125,对于 RTEMS 是 EADDRNOTAVAIL:
A nonexistent interface was requested or the requested address was not local.
在设备启动时,我们可以通过以下两种方式之一设置网络:
网络 IP 和子网是根据默认引导加载程序 (UBOOT) 中的内容自动配置的,并通过 RTEMS 操作系统设置。
调用 RTEMS 函数 rtems_bsdnet_ifconfig 以在启动时间后更改唯一以太网接口(interface)的 IP 地址。
为了澄清,选项 2 是这样调用的:
rtems_bsdnet_ifconfig(eth_interface, SIOCSIFADDR, &ipaddr);
如果网络按照选项 1 的指示设置,一切都按预期工作,但如果使用选项 2(即使设置与选项 1 定义的网络选项匹配),套接字绑定(bind)也会失败。
RTEMS 是否有已知原因或错误表明如果您重新配置 IP,此绑定(bind)将失败?
我们正在使用本质上使用 ioctl("eht1", SIOCSIFADDR, ...) 的方法设置新的 IP 地址(选项 2)。
如果我们绑定(bind)我们的套接字而不指定本地地址(即使用INADDR_ANY)那么它在任何情况下都有效。
rtems_bsdnet_ifconfig 是ioctl 函数的简单接口(interface)。它来自 rtems_glue.c 并具有函数签名 int rtems_bsdnet_ifconfig(const char *ifname, uint32_t cmd, void *param)
除了这个绑定(bind)之外,所有正常的网络功能似乎都能正常工作。
看了this之后我想也许我需要做更多的事情来重置我的 IP 地址。但这不起作用,使用第一个答案或什至对 SIOCSIFFLAGS 做任何事情都会导致所有网络功能停止。
最佳答案
你没有提到你正在运行的体系结构,但你正在以本地字节顺序设置端口和地址,这可能与网络字节顺序不同。我首先要尝试的是:
localSocketAddress.sin_port = htons (localPort);
localSocketAddress.sin_addr.s_addr = htonl (localAddress);
这也将使您的代码更具可移植性,以防万一这不是您的问题(即您在大端主机上运行)并且有一天您尝试在不同的小端系统上编译。
关于c++ - 为以太网适配器设置自定义 ip 时无法绑定(bind)套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37708381/
我在MiniTest::Spec和Capybara中使用以下规范:find_field('Email').must_have_css('[autofocus]')检查名为“电子邮件”的字段是否具有autofocus属性。doc说如下:has_css?(path,options={})ChecksifagivenCSSselectorisonthepageorcurrentnode.据我了解,字段“Email”是一个节点,因此调用must_have_css绝对有效!我做错了什么? 最佳答案 通过JonasNicklas得到了答案:No
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢
它不等于主线程的binding,这个toplevel作用域是什么?此作用域与主线程中的binding有何不同?>ruby-e'putsTOPLEVEL_BINDING===binding'false 最佳答案 事实是,TOPLEVEL_BINDING始终引用Binding的预定义全局实例,而Kernel#binding创建的新实例>Binding每次封装当前执行上下文。在顶层,它们都包含相同的绑定(bind),但它们不是同一个对象,您无法使用==或===测试它们的绑定(bind)相等性。putsTOPLEVEL_BINDINGput
我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge
我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些
有这些railscast。http://railscasts.com/episodes/218-making-generators-in-rails-3有了这个,你就会知道如何创建样式表和脚手架生成器。http://railscasts.com/episodes/216-generators-in-rails-3通过这个,您可以了解如何添加一些文件来修改脚手架View。我想把两者结合起来。我想创建一个生成器,它也可以创建脚手架View。有点像RyanBates漂亮的生成器或web_app_themegem(https://github.com/pilu/web-app-theme)。我
是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s
如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:
我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty