【问题标题】:is there a working vmci example?有工作的 vmci 示例吗?
【发布时间】:2015-03-28 20:39:17
【问题描述】:

我需要一个工作正常的 VMCI 套接字示例,它可以完成 UDP 的工作,但不需要联网。 vmci_sockets.h 代码中有许多很好的代码片段,但不是一个完整的工作模板可供扩展。

我认为服务器应该如下所示:

#include "vmci_sockets.h"
#define BUFSIZE 2048

int main() {
  int afVMCI = VMCISock_GetAFValue();
  if ((sockfd_dgram = socket(afVMCI, SOCK_DGRAM, 0)) == -1) {
    perror("socket");
    goto exit;
  }

  struct sockaddr_vm my_addr = {0};
  my_addr.svm_family = afVMCI;
  my_addr.svm_cid = VMADDR_CID_ANY;
  my_addr.svm_port = VMADDR_PORT_ANY;
  if (bind(sockfd, (struct sockaddr *) &my_addr, sizeof my_addr) == -1) {
    perror("bind");
    goto close;
  }

  if (getsockname(sockfd, (struct sockaddr *) &my_addr, &svm_size) == -1) {
    perror("getsockname");
    goto close;
  }

  if ((numbytes = recvfrom(sockfd, buf, sizeof buf, 0,
               (struct sockaddr *) &their_addr, &svm_size)) == -1) {
    perror("recvfrom");
    goto close;
  }

 close:
  return close(sockfd);
}

为了客户

#include <stdio.h>
#include <string.h>

#include "vmci_sockets.h"
#define BUFSIZE 128


int main() {
  int afVMCI = VMCISock_GetAFValue();

  int fd;
  struct sockaddr_vm addr;
  if ((fd = socket(afVMCI, SOCK_DGRAM, 0)) == -1) {
    perror("socket");
    return 1;
  }

  addr.svm_family = afVMCI;
  addr.svm_cid = VMADDR_CID_ANY;
  addr.svm_port = VMADDR_PORT_ANY;
  bind(fd, (struct sockaddr *) &addr, sizeof addr);

  struct sockaddr_vm serveraddr;
  socklen_t svm_size = sizeof serveraddr;

  {
    int numbytes; char buf[BUFSIZE]; bzero(buf, BUFSIZE);
    strcpy(buf, "hello there\n");
    if ((numbytes = sendto(fd, buf, BUFSIZE, 0,
               (const struct sockaddr *) &serveraddr, svm_size)) == -1) {
      perror("sendto error");
      goto close;
    }
  }

 close:
  close(fd);
  VMCISock_ReleaseAFValueFd(fd);
  return 0;
}

但是,它不起作用。没有太多文档,例如,如何排除故障。没有关于是否可以在同一虚拟机中同时尝试服务器和客户端以进行调试的信息。

我尝试向 vmware 董事会发帖,向他们的支持部门发送了一封电子邮件,但似乎没有人提供有效的示例。因为这不是标准的socketry,虽然它是类似的socketry,但它是可遵循的,也是不可遵循的。

谁有一个可行的例子?

【问题讨论】:

    标签: sockets virtual-machine vmware


    【解决方案1】:

    vmci 显然不支持 vmplayer 或 vmware fusion。这是 vmware 支持人员告诉我的:

    我一直在与我们的开发团队进行内部检查 您的请求,顺便说一句,只有在以下情况下才能产生兴趣 vSphere 失败的情况。我最后的评论是 我们从来没有打算正式支持 VMware Fusion 和 某些依赖项仅在内部引用上。

    不幸的是,我们没有任何这样的 vmci 示例可以 在涉及 VMware Fusion 时公开分享。

    【讨论】:

      猜你喜欢
      • 2012-04-29
      • 1970-01-01
      • 1970-01-01
      • 2019-04-12
      • 1970-01-01
      • 2012-10-21
      • 2013-09-23
      • 2011-07-02
      • 1970-01-01
      相关资源
      最近更新 更多