小编Mep*_*fel的帖子

调用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 != 0 )) {
   servaddr.sin_family = AF_INET;
   servaddr.sin_addr = serv_in_addr;
   servaddr.sin_port = htons(port);
   memcpy(&req.imr_multiaddr,&serv_in_addr,sizeof(req.imr_multiaddr));
   req.imr_interface.s_addr = INADDR_ANY;
   sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

   if( sockfd == -1 …
Run Code Online (Sandbox Code Playgroud)

c sockets udp multicast setsockopt

11
推荐指数
1
解决办法
2万
查看次数

从subshel​​l返回值并输出到局部变量

我发现了我的奇怪行为,我无法解释.以下代码工作正常:

function prepare-archive {
blah-blah-blah...
_SPEC_FILE=$(check-spec-file "$_GIT_DIR/packaging/")
exit $?
blah-blah-blah...
}
Run Code Online (Sandbox Code Playgroud)

意味着我得到了我期望的价值:

bash -x ./this-script.sh:
++ exit 1
+ _SPEC_FILE='/home/likern/Print/Oleg/print-service/packaging/print-service.spec
/home/likern/Print/Oleg/print-service/packaging/print-service2.spec'
+ exit 1
Run Code Online (Sandbox Code Playgroud)

只要我local向变量添加定义:

local _SPEC_FILE=$(check-spec-file "$_GIT_DIR/packaging/")
Run Code Online (Sandbox Code Playgroud)

我得到以下:

bash -x ./this-script.sh:
++ exit 1
+ local '_SPEC_FILE=/home/likern/Print/Oleg/print-service/packaging/print-service.spec
/home/likern/Print/Oleg/print-service/packaging/print-service2.spec'
+ exit 0
$:~/MyScripts$ echo $?
0
Run Code Online (Sandbox Code Playgroud)

问题:为什么?发生了什么事?我可以捕获从subshel​​l到local变量的输出并可靠地检查subshel​​l的返回值吗?

PS:prepare-archive在主shell脚本中调用.第一个exitexitfrom check-spec-file函数,第二个是prepare-archive函数 - 这个函数本身是从main shell脚本执行的.我从返回值check-spec-fileexit 1,那么通过这个值exit $?.因此我希望它们应该是一样的.

bash exit-code bash-function

8
推荐指数
2
解决办法
5899
查看次数

网络如何在QEMU的客户操作系统中运行?

我有一个问题,了解客户操作系统(Ubuntu)中的Qemu和网络是如何工作的.我已阅读本手册和其他人.如果我理解,如果你想在客户操作系统中选择互联网,你需要在主机操作系统中创建点击界面.之后链接eth0tap0接口:

  1. 通过使用NAT路由
  2. 通过使用bridge(link tap0eth0-host)

现在我在主机中有这些接口(ppp0 - 3G-modem - Internet,lo):

ppp0      Link encap:Point-to-Point Protocol  
      inet addr:10.245.146.78  P-t-P:10.64.64.64  Mask:255.255.255.255
      UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
      RX packets:49635 errors:0 dropped:0 overruns:0 frame:0
      TX packets:42745 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:3 
      RX bytes:52405401 (52.4 MB)  TX bytes:5988643 (5.9 MB)
Run Code Online (Sandbox Code Playgroud)

在阵风OS(eth0,lo)中:

eth0        Link encap:Ethernet HWaddr:52:54:00:12:34:56
      inet addr:10.0.2.15  Bcast:10.0.2.255 Mask:255.255.255.0
      ...
Run Code Online (Sandbox Code Playgroud)

在阵风OS工作的互联网!如果我在真实ppp0和访客界面之间没有链接,那么在客户操作系统中工作网络的方式和原因是什么?我甚至没有任何人在主机上为客户操作系统接口.

如果我理解那是因为来宾转发数据通过默认主机接口.但为什么?

Qemu选项:

qemu -hda ~/virt.disk -cdrom /dev/cdrom -boot once=dc …
Run Code Online (Sandbox Code Playgroud)

networking operating-system host qemu

3
推荐指数
1
解决办法
4180
查看次数