【问题标题】:How can I restrict my server to start only on specified port?如何限制我的服务器仅在指定端口上启动?
【发布时间】:2015-09-25 22:26:24
【问题描述】:

我有一个监听特定端口的服务器(固定)。

现在,如果该端口不可用,它会在任何随机端口上启动。我不想要这个。

如何确保如果指定的端口不可用,我的服务不应该启动?

int fd = ::socket(AF_INET, SOCK_STREAM, 0); 
int32_t const opt = 1;
struct sockaddr_in serv_addr;
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(61014);
::bind(fd, (struct sockaddr *)&serv_addr, sizeof(serv_addr));
::listen(fd, 5);

【问题讨论】:

  • 请出示您的代码。
  • 将代码编辑到您的问题中,不要将代码发布到 cmets 中,它不可读。

标签: c++ sockets


【解决方案1】:

如上所示,您的代码无法编译。但我认为你想要实现类似下面的代码: 您必须检查 bind() 调用是否失败。如果是这样,则意味着此端口已在使用中。您也可能已经拥有一个端口,因此建议使用SO_REUSEADDR 标志。

if( bind(fd_desc,(struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
{
    //print the error message
    perror("Bind failed.");
    return 1;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-30
    • 2018-01-07
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    相关资源
    最近更新 更多