套接字通信中accept函数的返回值
Value returned by accept function in socket communication
在 Socket 通信中,当服务器接受连接时,它 returns 如果连接成功,它总是大于 0 的值。
ConnectedSocket = accept(sock_desc, (struct sockaddr *)&echoClntAddr,(socklen_t*)&clntSock);
考虑连接到服务器的客户端和分配了编号 1 的服务器。
然后客户端断开连接,一段时间后另一个客户端连接。 accept 函数会给它分配数字 1 还是数字 2?
如果accept函数会分配数字2,那么在多少次连接后数字1会再次分配?
accept 调用 return 是一个将用于新连接的文件描述符。来自 accept 的手册页:
On success, these system calls return a nonnegative integer that is a descriptor for the accepted socket. On error, -1 is returned, and errno is set appropriately
接受永远不会 return 1 因为它是用于标准输出的文件描述符(除非您以编程方式关闭此文件描述符!)。至于第二个问题:
If accept function will assign number 2 then after how many connections will number 1 again be assigned ?
accept 将使用进程 table 中第一个未使用的文件描述符。因此,一旦相关的 TCP 连接关闭,就可以重用相同的 "returned number"(文件描述符)。
如果我正确理解了你的问题,你会问 return 来自 accept
的整数的唯一性。 accept
returns 文件描述符 所以如果我们谈论 POSIX OS 那么 POSIX 需要:
The open() function shall return a file descriptor for the named file
that is the lowest file descriptor not currently open for that
process.
accept
内部调用 get_unused_fd_flags
调用 __alloc_fd
生成新的文件描述符,open
以相同的方式生成 FD 所以适用于 open
的所有内容关于 FD 适用于 accept
.
所以结论:文件描述符可以重复使用,如果这些文件描述符较早关闭,accept
可以 return 重复数字。
在 Socket 通信中,当服务器接受连接时,它 returns 如果连接成功,它总是大于 0 的值。
ConnectedSocket = accept(sock_desc, (struct sockaddr *)&echoClntAddr,(socklen_t*)&clntSock);
考虑连接到服务器的客户端和分配了编号 1 的服务器。 然后客户端断开连接,一段时间后另一个客户端连接。 accept 函数会给它分配数字 1 还是数字 2?
如果accept函数会分配数字2,那么在多少次连接后数字1会再次分配?
accept 调用 return 是一个将用于新连接的文件描述符。来自 accept 的手册页:
On success, these system calls return a nonnegative integer that is a descriptor for the accepted socket. On error, -1 is returned, and errno is set appropriately
接受永远不会 return 1 因为它是用于标准输出的文件描述符(除非您以编程方式关闭此文件描述符!)。至于第二个问题:
If accept function will assign number 2 then after how many connections will number 1 again be assigned ?
accept 将使用进程 table 中第一个未使用的文件描述符。因此,一旦相关的 TCP 连接关闭,就可以重用相同的 "returned number"(文件描述符)。
如果我正确理解了你的问题,你会问 return 来自 accept
的整数的唯一性。 accept
returns 文件描述符 所以如果我们谈论 POSIX OS 那么 POSIX 需要:
The open() function shall return a file descriptor for the named file that is the lowest file descriptor not currently open for that process.
accept
内部调用 get_unused_fd_flags
调用 __alloc_fd
生成新的文件描述符,open
以相同的方式生成 FD 所以适用于 open
的所有内容关于 FD 适用于 accept
.
所以结论:文件描述符可以重复使用,如果这些文件描述符较早关闭,accept
可以 return 重复数字。