1

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(...)します。)

4

1 に答える 1

0

VMwareのドキュメントから、次のことがわかりました。

Workstation 7.0では、ストリームソケットはLinuxホスト、Linuxゲスト、およびWindowsゲストでサポートされていましたが、Windowsホストではデータグラムソケットのみがサポートされていました。

ホストPCはWindowsを実行しているため、これはサポートされていません。

于 2013-03-20T13:26:17.930 に答える