bind()返回值问题

1016133 2003-09-01 09:32:43
WSADATA wsadata;
struct sockaddr_in local;
WSAStartup(0x202,&wsadata);
slisten=socket(AF_INET,SOCK_STREAM,0);

local.sin_family=AF_INET;
local.sin_port=htons(5050);
local.sin_addr.s_addr=htonl(INADDR_ANY);
bind(slisten,(struct sockaddr*)&local,sizeof(local));
WSAGetLastError();

WSAGetLastError()返回5,但和客户端通讯正常。
请问是怎么回事?
...全文
549 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
1016133 2003-09-01
  • 打赏
  • 举报
回复
server端
switch(WSAGETSELECTEVENT(Msg.LParam))
{
case FD_ACCEPT:
sclient=Accept(Msg.WParam);
if(sclient!=INVALID_SOCKET)
WSAAsyncSelect(sclient,ServerForm->Handle,WM_SOCKETACCEPT,
FD_READ|FD_WRITE|FD_CLOSE);
break;
case FD_READ:
thread=new TClient(sclient);
break;
case FD_WRITE:
SendData(sclient,Edit1->Text.c_str());
break;
case FD_CLOSE:
closesocket(sclient);
Memo1->Lines->Add("disconnect ok");
break;
}
client端
switch(WSAGETSELECTEVENT(Msg.LParam))
{
case FD_CONNECT:
Memo1->Lines->Add("connect ok");
WSAAsyncSelect(sclient,Handle,WM_SOCKET,
FD_READ|FD_WRITE|FD_CLOSE);
break;
case FD_CLOSE:
DisConnect(sclient);
break;
case FD_READ:
RecvData(sclient);
break;
}
运行后client会无限循环的调用RecvData()接受。
请问是何问题,还是我的方法有错?
1016133 2003-09-01
  • 打赏
  • 举报
回复
bind()返回0,但WSAGetLastError()返回5。
pp616 2003-09-01
  • 打赏
  • 举报
回复
int ret=bind(slisten,(struct sockaddr*)&local,sizeof(local));
然后看以下ret是否为SOCKET_ERROR
如果是再用WSAGetLastError()来看详细的错误信息。
不是的话就是没有出错。

1,317

社区成员

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

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