Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C openssl和侦听随机端口_C_Network Programming_Openssl_Server - Fatal编程技术网

C openssl和侦听随机端口

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返回的字符串正好是我传递

我试图找到一种简单的方法来选择和监听随机端口。我可以迭代所有端口并尝试打开每个端口,然后将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,但出现错误:


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。

您的意思是说服务器应该随机绑定到一个端口并侦听,而不是特定的端口?(就像客户机在没有特别绑定的情况下做的那样)?我的意思是服务器应该在第一个空闲端口绑定。客户端知道端口号,因为服务器运行客户端并将端口号设置为环境变量。