在DLL中使用组播失败,高分请教高手!!!

iamstupid 2003-02-19 08:04:24
以下为出错代码,在运行到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;
...全文
119 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
NAICKY 2003-04-17
  • 打赏
  • 举报
回复
我也有一个类似的问题,搞不懂!
iamstupid 2003-02-20
  • 打赏
  • 举报
回复
lwugui(乌龟):
我试了你的办法,不行
lwugui 2003-02-19
  • 打赏
  • 举报
回复
你是不是在exe时先择了对SOCKET的支持,而在DLL时没有初使化SOCKET呢?
加入Winsock的头文件并连接相应库文件,如下:
#include "winsock.h"
#pragma comment(lib,"wsock32")


在初使话函数中进行初使化:

WSADATA wsaData(2,0);
WORD version = MAKEWORD(2,0);
int ret = WSAStartup(version,&wsaData);
if(ret != 0)
TRACE("Initilize Error!\n");
试试
iamstupid 2003-02-19
  • 打赏
  • 举报
回复
up

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧