Linux C++判断端口是否被占用

在端口被占用的情况下,启动系统是会产生异常的。所以想再启动系统绑定端口前查看端口是否已经被占用。看了网上许多资料,使用的都是netstat或losf,还有一些是使用socket绑定下看能不能成功。这些都不太符合我的需要。我想要的是在C++中判断端口是否被占用,如果未被占用,调用CZMQ的接口建立socket或者代理。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux C编程中,要获取正在使用的端口号,我们可以使用socket编程中的getsockname函数。该函数的功能是获取一个套接字的本地协议地址(也就是本机的IP地址和端口号)。该函数的原型为: ```c int getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen); ``` 其中,sockfd是之前创建的套接字的文件描述符,addr指向一个sockaddr类型的结构体,存放获取的地址信息,addrlen指向一个int型变量的指针,表示参数addr的长度。 具体的使用方法如下: ```c #include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> int main() { int sockfd = socket(AF_INET, SOCK_STREAM, 0); // 创建套接字 if (sockfd < 0) { printf("Create socket failed!\n"); return -1; } struct sockaddr_in addr; socklen_t addrlen = sizeof(addr); memset(&addr, 0, sizeof(addr)); // 调用getsockname函数获取本地协议地址 if (getsockname(sockfd, (struct sockaddr *)&addr, &addrlen) < 0) { printf("Get address info failed!\n"); return -1; } printf("Local address : %s:%d\n", inet_ntoa(addr.sin_addr), ntohs(addr.sin_port)); close(sockfd); return 0; } ``` 在上面的代码中,我们首先创建了一个TCP/IP协议的套接字,然后使用getsockname函数获取了本地协议地址,并输出了IP地址和端口号。需要注意的是,因为getsockname返回的是一个sockaddr类型的结构体,而我们使用的是TCP/IP协议,因此需要将其转换为sockaddr_in类型的结构体,这可以使用强制类型转换来实现。另外,为了将本地协议地址输出成字符串形式,我们使用了inet_ntoa函数来将一个32位无符号整数转换为点分十进制字符串。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值