【问题标题】:Winsock; Do I need to close a socket before reconnecting it?温索克;我需要在重新连接之前关闭套接字吗?
【发布时间】:2013-02-02 05:40:48
【问题描述】:

我正在使用winsock,并以标准方式打开我的套接字(我正确处理错误,但为了这个问题,我已经简化了代码);

SOCKET sSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

如果我这样连接它,它可能偶尔会失去连接。

connect(sSocket, reinterpret_cast<SOCKADDR*>(&sinAddr), sizeof(sinAddr));

发生这种情况时,我需要关闭并重新创建套接字,还是只需要重新调用 connect() ?

【问题讨论】:

  • socket会连接到不同的端点还是同一个端点?
  • 同一个服务器/主机,socket本身不会有变化的设置。
  • TCP 套接字(您正在使用的)一旦连接就不需要重新连接。但是如果你必须重新连接,你必须(好的做法)关闭这个套接字,然后调用 connect()
  • 我是否需要再次调用 socket() 才能重新创建它..?
  • 不,您不需要再次创建套接字。

标签: c++ c winapi winsock


【解决方案1】:

套接字被close()ed 后,就不能再使用了。

或者反过来:只要close() 没有在套接字上被调用,它就可以(重新)使用。

socket() 的调用会为调用进程分配一个套接字描述符。套接字描述符存在并一直分配给进程,直到调用close()

【讨论】:

    猜你喜欢
    • 2015-07-28
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    • 2018-05-11
    相关资源
    最近更新 更多