gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:10:33 39 4
gpt4 key购买 nike

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

  1. 创建套接字

    sockDesc = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)  
  2. 连接它(如果失败重试 'x' 次)

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

    (填写destAddr字段后)

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

    send(sockDesc, buffer, bufferLen, 0)  
    recv(sockDesc, buffer, bufferLen, 0)
  4. close() 套接字描述符并退出

    close(sockDesc)  

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

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

另一个我无法理解的有趣观察是什么时候我停止回显服务器并启动客户端。我创建了一个套接字(第 1 步)并调用了 connect(),但失败了(正如预期的那样),但随后我继续调用 connect(),比方说,10 次。重试 5 次后,我启动服务器并且 connect() 成功。但在 send() 调用期间,它收到 SIGPIPE 错误。我想知道:

1) 我是否需要在每次 connect() 失败时创建一个新套接字?根据我的理解,只要我没有在套接字上执行任何 send()/recv() 它就和新的一样好,我可以重复使用相同的 fd 用于 connect() 调用。

2) 我不明白为什么在服务器启动并且 connect() 成功时收到 SIGPIPE

最佳答案

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

close() closes a file descriptor, so that it no longer refers to any file and may be reused.

来自 here .

关于c - 在连接失败时重用套接字描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2237489/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com