【问题标题】:Connect a VMCI stream socket连接 VMCI 流套接字
【发布时间】:2013-03-20 21:26:17
【问题描述】:

我正在尝试使用 VMCI 套接字在虚拟机与其主机之间建立面向流的连接。我成功启动服务器,绑定地址,进入监听模式,调用accept等待客户端。但是,每当我从客户端调用 connect(...) 时,我都会收到 WSAECONNRESET 错误。

我的客户代码是:

int sockfd;    
WSADATA wsaData;
WORD wVersionRequested = MAKEWORD(2, 2);

// initialize sockets for win32
if (WSAStartup(wVersionRequested, &wsaData) != 0) {
    perror("Could not register with Winsock DLL.\n");
    exit(-1);
}

// get VMCI socket file descriptor
int afVMCI = VMCISock_GetAFValue();
if ((sockfd = socket(afVMCI, SOCK_STREAM, 0)) == -1) {
    perror("socket");
    exit(-1);
}

// initialize server address
struct sockaddr_vm their_addr = {0};
their_addr.svm_family = afVMCI;
their_addr.svm_cid = 2;
their_addr.svm_port = 1234;

// connect to server
if ((connect(sockfd, (struct sockaddr *) &their_addr, sizeof(their_addr))) == -1) {
    int e = WSAGetLastError();
    printf("Error: %d\n", e);
    exit(-1);
}

printf("Connected!\n");

每当我使用数据报套接字时,问题都不存在。 (当然,无需调用listen、accept 和connect。在这种情况下,我只需使用sendto(...) 即可。)

【问题讨论】:

  • 我只是想澄清一下:“每当我在客户端上调用 connect(...) 时”...您的意思是,“每当我从客户端调用 connect() 以进行连接时到服务器”?现在的措辞听起来像是服务器正在尝试连接到客户端。
  • 根据我对 WSAECONNRESET 错误描述的阅读,这听起来像是服务器端的问题。客户端连接后服务器还能存活吗?
  • 是的,我的意思是“从客户端连接”;刚刚解决了这个问题。我以相同的方式解释该错误消息,但服务器似乎很好。至少我在那里没有错误......

标签: c sockets vmware


【解决方案1】:

VMware documentation,我刚刚发现:

在 Workstation 7.0 中,Linux 主机、Linux 来宾和 Windows 来宾支持流套接字,但 Windows 主机仅支持数据报套接字。

由于我的主机 PC 运行 Windows,因此不支持此功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多