C语言 套接字通信中接受函数返回的值



在套接字通信中,当服务器接受连接时,如果连接成功,它将返回一个始终大于 0 的值。

 ConnectedSocket = accept(sock_desc, (struct sockaddr *)&echoClntAddr,(socklen_t*)&clntSock);

考虑连接到服务器的客户端和分配了数字 1 的服务器。然后客户端断开连接,一段时间后另一个客户端连接。 接受函数会为其分配数字 1 还是数字 2?

如果 accept 函数将分配数字 2,那么在多少个连接之后将再次分配数字 1?

接受调用返回将用于新连接的文件描述符。从接受的手册页:

成功后,这些系统调用将返回一个非负整数,该整数是接受套接字的描述符。出错时,返回 -1,并正确设置 errno

接受永远不会返回 1,因为它是用于标准输出的文件描述符(除非您以编程方式关闭此文件描述符!至于第二个问题:

如果接受函数将分配数字 2,那么在多少个连接之后将再次分配数字 1 ?

接受将使用进程表中第一个未使用的文件描述符。因此,一旦相关的TCP连接关闭,就可以重复使用相同的"返回数字"(文件描述符(。

如果我

正确理解了您的问题,您会询问从accept返回的整数的唯一性。 accept返回文件描述符,因此如果我们谈论的是 POSIX 操作系统,那么 POSIX 需要:

open(( 函数应返回命名文件的文件描述符 这是当前未打开的最低文件描述符 过程。

accept内部调用get_unused_fd_flags__alloc_fd调用以生成新的文件描述符,open以相同的方式生成FD,因此适用于有关FD open的所有内容都适用于accept

因此得出结论:文件描述符可以重用,如果这些文件描述符之前关闭,accept可以返回重复的数字。

相关内容

  • 没有找到相关文章

最新更新