当前位置: 首页 > 面试题库 >

连接失败时重用套接字描述符

阎坚成
2023-03-14
问题内容

在我的客户端代码中,我正在按照以下步骤连接到套接字:

  1. 创建一个套接字

    sockDesc = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)
    
  2. 连接它(失败时重试“ x”次)

    connect(sockDesc, (sockaddr *) &destAddr, sizeof(destAddr))
    

(填写destAddr字段后)

  1. 使用套接字进行send()/ recv()操作:

    send(sockDesc, buffer, bufferLen, 0)
    

    recv(sockDesc, buffer, bufferLen, 0)

  2. close() 套接字描述符并退出

    close(sockDesc)
    

如果在send()/ 期间recv()断开连接,我发现可以通过返回步骤2进行连接。

这个解决方案可以吗?我应该关闭套接字描述符并返回到步骤1吗?

我无法理解的另一个有趣的观察是何时停止回显服务器并启动客户端。我创建了一个Socket(第1步),并调用connect()失败(如预期的那样),但随后我继续调用connect()10次​​。重试5次后,我启动服务器并connect()成功。但是在send()通话过程中会收到SIGPIPE错误消息。我想知道:

1)每次connect()失败我都需要创建一个新的套接字吗?按我的理解,只要我还没有进行任何send()/
recv()插座上就和新的一样,我可以重复使用相同fdconnect()电话。

2)我不明白为什么SIGPIPE服务器启动并connect()成功后会收到消息。


问题答案:

是的,您应该关闭并返回步骤1:

close()关闭文件描述符,以便它不再引用任何文件,并且可以重用。

从这里。



 类似资料:
  • 始终获得此错误: 我查过这些帖子 套接字失败%1

  • 问题内容: 调用一次后如何重新连接到套接字io ? 这是代码 如果我这样做,它会起作用。如果我这样做,它将断开连接。但是,如果我尝试使用重新连接,则连接不再起作用。我如何才能建立连接? 问题答案: 好吧,您可以在这里选择… 首次初始化套接字值时,应使用, 下次(调用一次断开连接后),您应使用再次连接。 所以你的应该是这样的

  • 我正在使用套接字。io,应用程序由AWS提供。我收到一个浏览器控制台错误: websocket.js:54 WebSocket 连接到 'wss://www.tidee.com/socket.io/?EIO=4 客户代码: 服务器代码: 在 AWS 中,安全组接受端口 443,负载均衡器侦听端口 443。 应用程序在本地运行时工作(状态 101),并使用 协议。

  • 我已经做了所有的尝试,但都不起作用,这是我的问题,我试图将一些文件从一台机器发送到另一台机器,想法是在目标机器上创建一个servlet,在服务器上运行它,并等待任何客户机连接,客户机和servlet代码在lan网络类型中完美地工作,但当涉及到wan网络类型时,我得到了这个例外 线程“main”org.apache.http.conn.HTTPhostConnectException:连接到192.

  • 在套接字最终接受另一端消失的情况下,什么指定了这个超时?是操作系统(Ubuntu 11.04),还是来自TCP/IP规范,还是套接字配置选项?