【发布时间】: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 错误描述的阅读,这听起来像是服务器端的问题。客户端连接后服务器还能存活吗?
-
是的,我的意思是“从客户端连接”;刚刚解决了这个问题。我以相同的方式解释该错误消息,但服务器似乎很好。至少我在那里没有错误......