0
我試圖使用VMCI套接字在虛擬機和它的主機之間建立一個面向流的連接。我成功啓動服務器,綁定地址,將其置於偵聽模式,然後致電接受以等待客戶端。但是,無論何時我從客戶端撥打connect(...)
,我都會收到WSAECONNRESET
錯誤。連接VMCI流套接字
我的客戶端代碼:
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");
的問題是不存在的,每當我用數據報套接字。 (。當然,不叫聽,接受,並連接在這種情況下,我只需使用sendto(...)
的正常工作)
我只是想澄清一些事情:「每當我呼叫連接(...)在客戶端上......」你的意思是「每當我從客戶端調用連接()以連接到服務器」?現在的措辭使得它聽起來像服務器試圖連接到客戶端。 – 2013-03-11 20:47:46
根據我對WSAECONNRESET錯誤描述的閱讀,這聽起來像是服務器端的問題。客戶端連接後服務器是否可以存活? – 2013-03-11 21:15:53
是的,我的意思是「從客戶端連接」;只是解決了這個問題。我以同樣的方式解釋錯誤信息,但服務器似乎很好。至少我沒有錯誤在那裏... – 2013-03-12 08:15:43