关于扩展DLL中Socket(10038)的问题。

my15y 2005-02-14 11:12:55
我在扩展dll中使用winsock但是返回10038错误,说:描述符不是套接字 但我定义的SOCKET s 确实没错。并在win32 exe中测试通过。以下是函数部分:并在头文件中也包含winsock.h 和lib

FtpStart(CString hostname, CString FilePath, CString FileName, int Port, int ThreadNumber, CString SaveTo)
{
char buf[bufsize];
WORD wVersionRequested;
WSADATA wsaData;
int sockerror;
wVersionRequested=MAKEWORD(1,1);
sockerror=WSAStartup(wVersionRequested,&wsaData);
if (sockerror !=0) {
AfxMessageBox("WinSock初始化失败");
WSACleanup();
exit(1);
}
if (LOBYTE(wsaData.wVersion) !=1 || HIBYTE(wsaData.wVersion) !=1)
{
AfxMessageBox("您的系统不支持winsock1。1版");
WSACleanup();
exit(1);
}

SOCKET s;
if (s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP) ==SOCKET_ERROR) {
AfxMessageBox("Socket创建失败");
WSACleanup();
exit(1);
}
int bNodelay = 1;
/*if (setsockopt(s,IPPROTO_TCP,TCP_NODELAY,(char *) &bNodelay,sizeof(bNodelay)) ==SOCKET_ERROR) {
AfxMessageBox("Socket设定失败");
WSACleanup();
exit(1);
}*/
sockaddr_in addr;
sockaddr_in ServAddr;
addr.sin_family=AF_INET;
addr.sin_port=0;
addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
/*if (bind(s,(LPSOCKADDR)&addr,sizeof(addr)) ==SOCKET_ERROR) {
printf("bind错误");
exit(1);
}*/
ServAddr.sin_port=htons(Port);
ServAddr.sin_family=AF_INET;
/*sockaddr_in sa;
CString ServIP;
struct hostent *phe;
if (phe=gethostbyname(hostname)) {
for (int nAdapter=0; phe->h_addr_list[nAdapter]; nAdapter++) {
memcpy (&sa.sin_addr.S_un.S_addr,phe->h_addr_list[nAdapter],phe->h_length);
}
}
else {
AfxMessageBox("无法解析主机名"+hostname);
WSACleanup();
exit(1);
}
ServIP=inet_ntoa(sa.sin_addr);
*/
ServAddr.sin_addr.S_un.S_addr=inet_addr(ServIP);

if (connect(s,(LPSOCKADDR)&ServAddr,sizeof(ServAddr))==SOCKET_ERROR) {
AfxMessageBox("无法连接到主机");
WSACleanup();
exit(1);
}
CString Rmsg;
Rmsg=OnRecv(s,buf);
return 0;
}

...全文
91 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
my15y 2005-02-16
  • 打赏
  • 举报
回复
setsockopt 和connect函数都会出现10038错误
somedummy 2005-02-14
  • 打赏
  • 举报
回复
哪一个函数调用导致10038的?

这个函数也庞大了一点吧?不能拆分一下吗?

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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