我有一个代码,其中发送多播数据报.一段重要的代码:
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) 我发现了我的奇怪行为,我无法解释.以下代码工作正常:
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)
问题:为什么?发生了什么事?我可以捕获从subshell到local变量的输出并可靠地检查subshell的返回值吗?
PS:prepare-archive在主shell脚本中调用.第一个exit是exitfrom check-spec-file函数,第二个是prepare-archive函数 - 这个函数本身是从main shell脚本执行的.我从返回值check-spec-file的exit 1,那么通过这个值exit $?.因此我希望它们应该是一样的.
我有一个问题,了解客户操作系统(Ubuntu)中的Qemu和网络是如何工作的.我已阅读本手册和其他人.如果我理解,如果你想在客户操作系统中选择互联网,你需要在主机操作系统中创建点击界面.之后链接eth0和tap0接口:
现在我在主机中有这些接口(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) bash ×1
c ×1
exit-code ×1
host ×1
multicast ×1
networking ×1
qemu ×1
setsockopt ×1
sockets ×1
udp ×1