请教:bind()语句怎么错了?

shileior 2004-01-05 10:53:13
请教高手问题:
为什么bind()语句总是出错,其他代码无误。error №:10022 ,是什么错误信息?
__fastcall TListenThread::TListenThread(PROTO m_ProtocolA, UINT m_PortA, bool CreateSuspended):TThread(FALSE)
{
m_Socket = INVALID_SOCKET;
m_Port = m_PortA ;
m_Protocol = m_ProtocolA;
szTmp[0] = '\0';
::ZeroMemory(&wsaData,sizeof(WSAData));
::ZeroMemory(&server,sizeof(struct sockaddr_in));
FreeOnTerminate = TRUE;
}


WSAStartup(version,&wsaData);
m_Socket = socket(AF_INET,SOCK_STREAM,0);

server.sin_family = AF_INET;
server.sin_port = htons(m_Port);
server.sin_addr.S_un.S_addr = INADDR_ANY;

(以上代码通过编译,节选部分帖出)

void __fastcall TListenThread::BindListenSocket()
{

if(bind(m_Socket,(sockaddr*)&server,sizeof(struct sockaddr_in))) //bind语句返回值总不为零?
{
sprintf(szTmp,"Failed to bind socket,error no:%d",::WSAGetLastError());
::MessageBox(0,szTmp,"Error!",MB_OK+MB_ICONERROR);
DoError();
return;
}
}
...全文
62 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
shileior 2004-01-09
  • 打赏
  • 举报
回复
这两天正在生病中,感冒、嗓子痛。。。。。。
to:pp616(傻小子)
有空和你QQ联系,除了吃饭时间我都在线。
shileior 2004-01-09
  • 打赏
  • 举报
回复
谢谢解决了更大的问题,马上给分。
pp616 2004-01-09
  • 打赏
  • 举报
回复
就是 sockaddr *
winsock2.h中是这样定义的。

typedef struct sockaddr *PSOCKADDR;
其实和你的代码是样的。

关键在WSAGetLastError()得到的错误代码。这样就知道出了什么错。
知道原因问题就好对付了。

你把你的Error代码帖出来吧。
yesry 2004-01-08
  • 打赏
  • 举报
回复
个人版不知道有没有Indy,DataProvider,ClientDataSet等。
shileior 2004-01-08
  • 打赏
  • 举报
回复
能否告知QQ,一叙。
shileior 2004-01-08
  • 打赏
  • 举报
回复
to pp616(傻小子) :
好像有些作用,不过有时候还是出同样的问题,可能和前面的代码有关系。
另:问一下"PSOCKADDR"的具体作用和用法。
pp616 2004-01-05
  • 打赏
  • 举报
回复
server.sin_family=AF_INET;
server.sin_addr.s_addr=htonl(INADDR_ANY);
server.sin_port=htons(m_Port);
if(bind(m_Socket,(PSOCKADDR)&server,sizeof(server))==SOCKET_ERROR)
{
//出错处理
}

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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