2013-03-11 124 views
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(...)的正常工作)

+0

我只是想澄清一些事情:「每當我呼叫連接(...)在客戶端上......」你的意思是「每當我從客戶端調用連接()以連接到服務器」?現在的措辭使得它聽起來像服務器試圖連接到客戶端。 – 2013-03-11 20:47:46

+0

根據我對WSAECONNRESET錯誤描述的閱讀,這聽起來像是服務器端的問題。客戶端連接後服務器是否可以存活? – 2013-03-11 21:15:53

+0

是的,我的意思是「從客戶端連接」;只是解決了這個問題。我以同樣的方式解釋錯誤信息,但服務器似乎很好。至少我沒有錯誤在那裏... – 2013-03-12 08:15:43

回答

0

VMware documentation,我才發現:

工作站7.0,流套接字是支持Linux主機,Linux客戶機和Windows客戶機,但只有Windows主機支持數據報套接字。

由於我的主機PC運行Windows,因此不支持此操作。