2013-10-09 6 views
0

Я только что узнал о PGM (Pragmatic General Multicast) в сокетах Windows. Я прочитал на msdn, как настроить сокет отправки и получения, но он не работает.PGM winsock2 не удалось создать сокет

Это код до сих пор:

#pragma comment(lib,"Ws2_32.lib") 

#include <stdio.h> 
#include <iostream> 
#include <ws2tcpip.h> 
#include <Winsock2.h> 
#include <wsrm.h> 



int main(int argc, const char* argv[]) 
{ 
    DWORD dwRet = NO_ERROR; 

    WSADATA wsa_data; 
    if(WSAStartup(MAKEWORD(2, 0), &wsa_data) != 0) { 
     dwRet = GetLastError(); 
     WSACleanup(); 
     return dwRet; 
    } 

    SOCKET  s; 
    SOCKADDR_IN salocal, sasession; 
    int   dwSessionPort; 

    s = socket(AF_INET, SOCK_RDM, IPPROTO_RM); 

    if(s == INVALID_SOCKET) 
    { 
     dwRet = GetLastError(); 
     WSACleanup(); 
     return dwRet; 
    } 

    salocal.sin_family = AF_INET; 
    salocal.sin_port = htons (0); // Port is ignored here 
    salocal.sin_addr.s_addr = htonl (INADDR_ANY); 

    int iRet = bind (s, (SOCKADDR *)&salocal, sizeof(salocal)); 

    if(iRet == SOCKET_ERROR) 
    { 

     dwRet = GetLastError(); 
     WSACleanup(); 
     return dwRet; 
    } 

    dwSessionPort = 0; 
    sasession.sin_family = AF_INET; 
    sasession.sin_port = htons (dwSessionPort); 
    sasession.sin_addr.s_addr = inet_addr ("234.5.6.7"); 

    connect (s, (SOCKADDR *)&sasession, sizeof(sasession)); 

    return dwRet; 
} 

Я получаю код ошибки (тип сокета не поддерживается) 10044, когда я пытаюсь создать сокет. Как включить использование PGM?

В настоящее время я работаю над Windows 7 с установленным MSMQ.

EDIT Это msdn сайт, который я прочитал.

ответ

0

Нашел решение, MSMQ не был правильно установлен. Чтобы включить все функции (поддержка многоадресной передачи), все подпапки должны были быть явно проверены, как показано на рисунке ниже.

enter image description here