在DLL中使用组播失败,高分请教高手!!!
以下为出错代码,在运行到setsockopt加入组播组时失败,但同样的代码在exe中就没有问题。
SOCKET hSock = INVALID_SOCKET;
int nTTL;
WSADATA wsaData;
if( WSAStartup( 0x101, &wsaData ) != 0 )
goto FAIL_EXIT;
//create socket
hSock = socket(AF_INET, SOCK_DGRAM, 0);
if( hSock == INVALID_SOCKET )
goto FAIL_EXIT;
//bind
sockaddr_in localAddr;
localAddr.sin_family = AF_INET;
localAddr.sin_addr.S_un.S_addr = INADDR_ANY; //inet_addr(szLocalAddr);
localAddr.sin_port = htons(wUdpPort);
if( bind(hSock, (sockaddr *)&localAddr, sizeof(localAddr))!=0 )
goto FAIL_EXIT;
//join to multicast group
ip_mreq mreq;
mreq.imr_multiaddr.S_un.S_addr = inet_addr(szMulticastAddr);
mreq.imr_interface.S_un.S_addr = INADDR_ANY; //inet_addr(szLocalAddr);
if( setsockopt(hSock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char*)&mreq, sizeof(mreq)) == SOCKET_ERROR )
{
//此处调用失败,返回10042:不支持此功能
//但在exe中直接使用组播则没有问题
int result = WSAGetLastError();
goto FAIL_EXIT;
}
//set multicast ttl
nTTL = 255;
if( setsockopt(hSock, IPPROTO_IP, IP_MULTICAST_TTL, (char*)&nTTL, sizeof(nTTL)) == SOCKET_ERROR )
goto FAIL_EXIT;
//connect, set dest IP addr
sockaddr_in groupAddr;
groupAddr.sin_family = AF_INET;
groupAddr.sin_addr.S_un.S_addr = inet_addr(szMulticastAddr);//inet_addr("192.168.0.1");
groupAddr.sin_port = htons(wUdpPort);
if( connect(hSock, (sockaddr*)&groupAddr, sizeof(groupAddr))!=0 )
goto FAIL_EXIT;
return hSock;
FAIL_EXIT:
if( hSock != INVALID_SOCKET )
closesocket(hSock);
return INVALID_SOCKET;