C++ ,socket,bind()绑定端口之后,应该如何解除?

firendlys 2010-12-28 04:57:54

.....
// m_sock , addr 这两个变量均已经初始化.
bool fn(){
int ret;
ret=bind(m_sock,(SOCKADDR *)&addr,sizeof(SOCKADDR));// 绑定
if( ret == SOCKET_ERROR ){
closesocket(m_sock);
MessageBox(0,L"端口绑定失败!",0,0);
return false;
}
closesocket(m_sock);// 关闭 socket
return true;
}

上述代码中,我在第一次调用 fn() 的时候,一切正常.
但第二次调用fn()的时候,却提示 "端口绑定失败"...
请问,应该怎样解除对端口的绑定呢?
UDP 和 TCP 的解除方式是不是一样的?
...全文
3105 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
乐CC 2010-12-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 bluesky12312388 的回复:]
不对,调用closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:
BOOL bReuseaddr=TRUE;
setsockopt (s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));
[/Quote]
不太理解这个操作,能否详细解释一下?
bluesky12312388 2010-12-28
  • 打赏
  • 举报
回复
不对,调用closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:
BOOL bReuseaddr=TRUE;
setsockopt (s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));
bluesky12312388 2010-12-28
  • 打赏
  • 举报
回复
setsockopt ( SOCKET s, int level, int optname,
const char FAR* optval, int optlen);
SO_REUSEADDR
firendlys 2010-12-28
  • 打赏
  • 举报
回复
明白了,原来是 closesocket() 之后,没有 再次 socket() 就 bind()了..
bdmh 2010-12-28
  • 打赏
  • 举报
回复
你这段代码有问题呀,怎么不管出不出错,都会closesocket
bluesky12312388 2010-12-28
  • 打赏
  • 举报
回复
解除端口绑定在客户端可以关闭SOCKET就可以了,在服务器会有一个等待时间。
如果要在同一个端口上使用SOCKET可以用端口复用。

64,646

社区成员

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

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