C openssl和侦听随机端口
我试图找到一种简单的方法来选择和监听随机端口。我可以迭代所有端口并尝试打开每个端口,然后将fd传递给BIO,但是这个解决方案太复杂,可能会被破坏。此外,我还寻找便携式解决方案 相反,我搜索单个OpenSSL函数,但找不到任何函数。是否有简单的解决方案,如OpenSSL库提供的单函数调用 关于我的回答: 我在将“*”或“*:*”传递给BIO_new_accept并通过BIO_get_accept_port获取端口号时遇到问题。在本例中,BIO_get_accept_port返回的字符串正好是我传递给BIO_new_accept的字符串。有没有关于如何获取端口号的建议 附加编辑: 我发现我必须在使用asterix调用BIO_new_accept之后再调用BIO_do_accept,但出现错误:C openssl和侦听随机端口,c,network-programming,openssl,server,C,Network Programming,Openssl,Server,我试图找到一种简单的方法来选择和监听随机端口。我可以迭代所有端口并尝试打开每个端口,然后将fd传递给BIO,但是这个解决方案太复杂,可能会被破坏。此外,我还寻找便携式解决方案 相反,我搜索单个OpenSSL函数,但找不到任何函数。是否有简单的解决方案,如OpenSSL库提供的单函数调用 关于我的回答: 我在将“*”或“*:*”传递给BIO_new_accept并通过BIO_get_accept_port获取端口号时遇到问题。在本例中,BIO_get_accept_port返回的字符串正好是我传递
14041875799096:错误:02003000:系统库:getservbyname:系统库:b_sock.c:224:服务='*'我可能找到了解决方案。因为我的英语很差,我不能完全理解文档文本。 我再次阅读了文档,找到了解决方案! 从站点: BIO_set_accept_port()使用字符串名称设置接受端口。这个 端口表示为“主机:端口”形式的字符串,其中“主机” 是要使用的接口,“端口”是端口。一个或两个值 可以是“*”表示任何接口或端口 分别地“端口”的语法与中指定的端口相同 用于连接BIOs的BIO_set_conn_port(),即它可以是数字 端口字符串或要使用getservbyname()和字符串进行查找的字符串 桌子 所以我必须只将asterix字符传递给BIO_do_accept 将asterix字符传递给BIO_new_accept无效,因为BIO_do_accept返回错误。我是这样解决的:
我没有将asterix传递给BIO_new_accept,而是从1开始增加int,并对每个数字执行BIO_new_accept。您的意思是说服务器应该随机绑定到一个端口并侦听,而不是特定的端口?(就像客户机在没有特别绑定的情况下做的那样)?我的意思是服务器应该在第一个空闲端口绑定。客户端知道端口号,因为服务器运行客户端并将端口号设置为环境变量。