连接VMCI流套接字

时间:2013-03-11 16:20:27

标签: c sockets vmware

我正在尝试使用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(...),它可以正常工作。)

1 个答案:

答案 0 :(得分:0)

VMware documentation,我刚刚找到:

  

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

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