PGM winsock2无法创建套接字

时间:2013-10-09 12:38:51

标签: windows winsock winsock2 pgm-protocol

我刚刚在Windows套接字中发现了PGM(实用通用多播)。我在msdn上读到了如何配置发送和接收套接字,但它无法正常工作。

这是到目前为止的代码:

#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?

我目前正在使用安装了MSMQ的Windows 7。

修改 这是我读过的msdn网站。

1 个答案:

答案 0 :(得分:0)

找到解决方案,MSMQ没有正确安装。为了使其包含所有功能(多播支持),必须明确检查所有子文件夹,如下图所示。

enter image description here