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